OpenSSH
오픈SSH(OpenSSH, OpenBSD Secure Shell)는 ssh 프로토콜을 이용하여 암호화된 통신 세션을 컴퓨터 네트워크에 제공하는 컴퓨터 프로그램의 모임이다. SSH 커뮤니케이션스 시큐리티가 제공하는 사유 시큐어 셸 소프트웨어 제품군을 대체할 목적으로 오픈 소스로 작성되었다. 테오 드 라트의 주도 하에 오픈SSH는 보안을 중시하는 오픈BSD 프로젝트의 일부로 개발되었다. 이 프로젝트의 개발은 기부로 운영된다.
Categories
- ssh-add
- ssh-argv0
- ssh-import-id
- ssh-import-id-lp
- ssh-keyscan
- ssh-agent
- ssh-copy-id - 원격지의
~/.ssh/authorized_keys
파일에 자신의 Public 키를 복사하는 명령이다. 즉, 비밀번호 없이 접속하고 싶다면 사용하자. - ssh-import-id-gh
- ssh-keygen
- sftp
- rsync
- scp
- sshfs (Python) - fsspec을 구현한 Python 클라이언트. asyncssh 기반이다.
- SSHFS (FUSE) - FUSE를 사용하는 마운트용 클라이언트
SSH PORT CHANGE
SSH 포트번호를 변경하고 싶다면 /etc/ssh/sshd_config
파일을 열어, 수정하면 된다. 다만 수정 후 아래와 같이 SELinux에게 수정된 SSH 포트에 대한 정보를 알려줘야 한다.
How to install
CentOS 7
openssh-clients와 openssh-server 패키지를 설치한다.
$ sudo yum -y install openssh-server openssh-clients
## SSH Port(22)가 열렸는지 확인한다.
$ netstat -tulpn | grep :22
## 서비스 등록.
$ chkconfig sshd on
## 그리고 SSH를 시작한다.
$ service sshd start
또는
Ubuntu server
우분투의 경우 아래와 같이 진행하면 된다.
## 포트 및 서비스 활성화 확인
$ netstat -ntlp | grep sshd
$ service ssh status
## 설치 확인
$ dpkg --get-selections | grep ssh
## 설치
$ sudo apt-get update
$ sudo apt-get install openssh-server
## 설치 확인
$ dpkg --get-selections | grep ssh
## 서비스 활성화 및 포트 확인
$ service ssh status
$ ps -ef | grep sshd | grep -v grep
$ netstat -ntlp | grep sshd
Arch Linux
x11 관련 인증을 위한 추가 설치:
Windows
- [추천] Windows용 OpenSSH 시작 | Microsoft Learn
- (Windows) OpenSSH 서버 실행하고 SSH로 접속하는 방법
- (Windows) Windows Server 에 OpenSSH Server 구성하기
- Windows용 OpenSSH의 키 기반 인증 | Microsoft Learn
- Windows RDP 보안챙기기 + SSH tunneling - 양말을 주세요
PowerShell 에서 진행한다.
우선 온라인에서 설치 가능한 패키지를 찾아본다:
설치 가능한 OpenSSH 클라이언트 및 서버가 출력된다:
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
출력된 내용 중 서버를 선택한다:
좀 오래 기다리면 재 시동 여부(False)와 함께 아래 내용이 출력된다:
서비스를 기동한다:
다음과 같은 내용이 출력된다.
재시작시 서비스 자동 시작하게 등록한다:
그리고 방화벽에 등록한다.
다음과 같이 출력된다. Enabled
가 True 가 출력되면 된다.
Name : OpenSSH-Server-In-TCP
DisplayName : OpenSSH SSH Server (sshd)
Description : Inbound rule for OpenSSH SSH Server (sshd)
DisplayGroup : OpenSSH Server
Group : OpenSSH Server
Enabled : True
Profile : Any
Platform : {}
Direction : Inbound
Action : Allow
EdgeTraversalPolicy : Block
LooseSourceMapping : False
LocalOnlyMapping : False
Owner :
PrimaryStatus : OK
Status : The rule was parsed successfully from the store. (65536)
EnforcementStatus : NotApplicable
PolicyStoreSource : PersistentStore
PolicyStoreSourceType : Local
RemoteDynamicKeywordAddresses : {}
PolicyAppId :
이제 접속하면 된다.
SSH 키로 로그인을 활성화하는 방법
C:\ProgramData\ssh\sshd_config
파일을 관리자 모드로 열고 다음 줄에 주석을 풀자:
SSHD 재부팅 하자:
- 일반 사용자는 설정파일의 경로
%HOME%\.ssh\authorized_keys
에 공개키를 복사하면 된다. - 단, 관리자는 저 파일이 아니라
C:\ProgramData\ssh\administrators_authorized_keys
에 공개키를 복사해야 한다.
만약 제거하고 싶다면
기본 셸을 변경하는 방법
- Windows용 OpenSSH 서버 구성 | Microsoft Learn
- ssh - Adding parameters to DefaultShell in Windows OpenSSH Server (e.g. powershell.exe -NoLogo) - Super User
- DefaultShell · PowerShell/Win32-OpenSSH Wiki
- ssh - Setting to use git-bash as default shell when connecting remotely via OpenSSH to Windows Server 2016 - Super User
레지스트리를 수정하여 기본 쉘을 변경한다. 사용 가능한 레지스트리 경로는 다음과 같다:
-
HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell
- full path of the shell executable -
HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellCommandOption
- (optional) - switch that the configured default shell requires to execute a command, immediately exit and return to the calling process. By default this is-c
. -
HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellEscapeArguments
- (optional) - flag that allow you to skip escaping the arguments of default shell. By default this is0
. This option is only applicable to shells other than powershell, bash, cygwin, cmd, and ssh-shellhost.exe.
PowerShell 셋팅:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "--login" -PropertyType String -Force
SSHD Config
- AllowGroups
- 여기에 등록된 group만 접속 가능함.
- AllowUsers
- 이곳에 등록된 계정만 접속 가능함.
- DenyGroups
- 모두 접속이 허용, 여기에 등록된 group만 접속 거부됨.
- DenyUsers
- 모두 접속이 허용, 여기에 등록된 계정만 접속 거부됨.
- PermitRootLogin no
- 외부에서 root 계정으로 접속 금지. 루트 계정의 비밀번호를 알아내는 것을 방지하며, 루트 권한을 이용한 공격을 차단하는데 도움이 됩니다.
- PermitRootLogin yes
- 외부에서 root 계정으로 접속 가능.
- PermitRootLogin prohibit-password
- Root 비밀번호 로그인은 막고 key파일 로그인만 허용.
- X11Forwarding yes
- X11 전달 설정.
- PubkeyAuthentication yes
- 공개키 인증 여부
- PasswordAuthentication no
- 터널링된 일반 텍스트 암호를 비활성화하려면 여기에서 no로 변경하십시오!
- PermitEmptyPasswords no
- 빈 비밀번호를 허용하지 않도록 설정하여, 비밀번호를 알아내는 것을 방지하는데 도움이 됩니다.
- KbdInteractiveAuthentication no
- 키보드 인터랙티브 인증을 비활성화합니다. 이는 인증 절차를 간소화하고, 보안을 강화하는 데 도움이 됩니다.
- AllowAgentForwarding no
- SSH 에이전트 포워딩을 비활성화합니다. 이는 악의적인 서버가 사용자의 로컬 SSH 에이전트를 이용하는 것을 방지합니다.
- X11Forwarding no
- X11 포워딩을 비활성화합니다. 이는 X11 세션을 가로채는 것을 방지합니다.
- ClientAliveInterval 300
- SSH 클라이언트의 생존 확인 간격. ClientAliveCountMax 와 함께 사용.
- 이를 통해 비활성화된 SSH 세션을 더 빨리 종료할 수 있습니다.
- ClientAliveCountMax 2
- SSH 클라이언트의 생존 확인 최대 시도 횟수. ClientAliveInterval 와 함께 사용.
- 이를 통해 비활성화된 SSH 세션을 더 빨리 종료할 수 있습니다.
- LoginGraceTime 1m
- SSH 접속 시도 후 인증에 성공할 때까지 허용하는 시간을 줄입니다. 이를 통해 공격자가 무작위로 비밀번호를 시도하는 시간을 제한하게 됩니다. 기본 설정 값은 보통 2분이지만, 이를 1분으로 줄여줍니다.
- MaxAuthTries 3
- 인증 시도 횟수. 공격자의 SSH 서버에 대한 공격 범위를 제한.
- MaxSessions 3
- 최대 세션 수 제한. 하여 공격자의 SSH 서버에 대한 공격 범위를 제한합니다.
- PubkeyAuthentication yes
- 공개키 인증을 사용. AuthorizedKeysFile 와 함께 사용.
- 이는 더 강력한 보안을 제공하며, 암호를 통한 공격을 방지하는데 도움이 됩니다.
- AuthorizedKeysFile .ssh/authorized_keys
- 암호 대신에 SSH 키를 이용한 접속을 허용. PubkeyAuthentication 와 함께 사용.
- SSH가 로그인한 사용자의 홈 디렉토리 기준으로 공개키를 찾는 경로를 설정해줍니다.
SSH 서버 보안 강화를 위한 기본적인 설정 방법
잘 모르면 기본 옵션에서 일단 아래 두 개만 설정하자.
특정 HOST의 암호접속 허용
특정 신뢰할 수 있는 컴퓨터에서는 암호 접속을 허용하고, 그 외에서는 키 접속만 허용하기
PasswordAuthentication no
PermitRootLogin no
Match Address 192.168.0.0/24 User gdhong
PasswordAuthentication yes
Match Address 172.12.0.0/24 User gdhong
PasswordAuthentication yes
Match all
나의 경우
- VPN (Nebula Overlay Network) 설정 하면 내가 관리하는 컴퓨터의 네트워크를 전부 돌아다닐 수 있고,
- 기본 접속 PC는 "내꺼"만 가능.
- 다만 비상시를 위한 접속 루트를 하나 만들어 두는데 다음과 같이 설정함.
PasswordAuthentication no
PermitRootLogin no
Match Address 192.168.0.0/24 User {사용자명}
PasswordAuthentication yes
SSH 관련 파일들
-
~/.ssh
- 현재 사용자의 ssh 관련 파일이 존재하는 디렉터리
-
~/.ssh/id_rsa
- RSA Private Key 를 저장한 파일
-
~/.ssh/id_rsa.pub
- RSA 공개키를 저장한 파일 (다른 사람에게 공개 가능)
-
~/.ssh/authorized_keys
- 서버에서 접속 가능하도록 클라이언트 측의 공개키를 1라인 씩 저장한다.
-
~/.ssh/known_hosts
- 클라이언트에서 접속할 인증된 서버의 핑거프린트를 1라인 씩 저장한다.
How to generate new host keys
If you looked in /etc/ssh and didn't see any key files or you just want to create new host keys yourself, use ssh-keygen to create a new key pair. This must be done as root, and you have to specify the name of the new key pair. You only need one key pair. Always specify a passphrase:
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
6c:24:75:54:d3:21:17:c9:11:db:41:dd:95:3f:d0:ac root@windbag
This example uses the default key names, but you can call the keys anything you like. If you use different names, be sure to enter them in /etc/ssh/sshd_config:
Comment out or delete any entries for keys that do not exist.
Limit SSH access to specific clients by IP address
Option 2: Using TCP wrappers
You can also configure which hosts can connect using TCP wrappers. With TCP wrappers, in addition to IP addresses you can also use hostnames in rules.
By default, deny all hosts.
/etc/hosts.deny
:
Then list allowed hosts in hosts.allow. For example to allow network 192.168.0.0/24
and localhost.
/etc/hosts.allow
:
SSH Key
원격 머신에서 전송한 id_rsa.pub
파일을 authorized_keys
파일에 추가해보자. 만약 리모트 머신으로 접속하는 여러개의 로컬 머신이 있다면 각각의 로컬 머신의 id_ras.pub 파일을 authorized_keys에 추가해주면 된다.
SSH를 이용해서 접속하기
## 만약 id_rsa 파일을 $HOME/.ssh/id_rsa에 만들지 않고 다른 디렉토리에 만들었다면 -i 옵션을 사용한다.
## 홈디렉토리에 auth라는 이름의 파일에 id_rsa의 내용이 담겨 있다면 아래와 같이 한다.
$ ssh -i $HOME/auth egoing.net
ClientAlive
Linux 세션 타임아웃을 설정하기 위해 sshd_config 의 ClientAliveInterval, ClientAliveCountMax를 설정했으나 나의 의도처럼 동작하지 않았다. 나의 목표는 터미널에서 60초 동안 아무런 명령어를 치지 않았을 때 세션이 끊기는 것이었다. sshd_config 의 ClientAlive* 지시자 들은 쓰임새가 다른 것인데 그것을 login session timeout으로 오해해서 생긴 문제였다.
- ClientAliveInterval 로 client 로 응답을 받기 까지 세션을 유지 (대기) 할 시간을 설정한다. 단위는 second 이다.
- ClientAliveCountMax 는 client 가 응답이 없어도 접속을 유지하는 횟수이다.
따라서, 총 세션 시간은 다음과 같다:
다만 위에서 설정한 ClientAlive 지시자들을 설정함으로써 ssh 접속한 client가 5초 동안 터미널에 아무런 명령어를 치지 않았다고 세션이 끊기는 것은 아니다. sshd_config 에서 설정한 ClientAlive 는 말 그대로 sshd 에 대한 설정이다. client 가 shell 에 로그인한 상태이면 기본적으로 client는 서버의 요청에 응답 패킷을 보내기 때문에 서버는 client 가 살아 있다고 생각한다. 전체 client 가 죽는 상황(ex. 예기치 못하게 종료되거나 네트워크가 끊김)이면 더 이상 서버에게 세션 응답 packet을 보낼 수 없는데 ClientAlive* 지시자는 이런 상황을 감지하는 것이다. 그래서 일정 시간 동안 로그인한 shell과 "상호작용" 여부에 따라 세션을 종료하려면 TMOUT
shell 환경변수를 설정해야 한다.
TMOUT
은 사용자 계정의 login session 을 유지하는 시간을 설정하는 shell 환경 변수이다. 지정 시간 동안 계정의 activity가 없으면 login shell에서 자동 로그아웃을 한다. (단위 : seconds)
[root@wglee-server ~]# tail -n 2 /etc/profile
export HISTTIMEFORMAT="[%Y/%m/%d %H:%M] "
export TMOUT=60
[root@wglee-vm ~]# history timed out waiting for input: auto-logout
[centos@wglee-vm ~]$
[wglee3@wglee-vm ~]$ timed out waiting for input: auto-logout
[root@wglee-vm ~]#
ForwardX11
- SSH ForwardX11 을 이용하여 맥에서 우분투 X프로그램 실행 Computer Tip
- 리눅스 X11 포워딩(X11 Forwarding) - ssh 접속으로 GUI 프로그램 실행하기
- Xming 을 이용하여 원격 X-Windows 에 연결하기
- Xming 으로 X-Window 원격 접속 하기
- MS 윈도우용 X-서버, Xming
X11 포워딩은 원격 시스템에서 실행되는 X11 프로그램의 그래픽 인터페이스를 로컬 클라이언트 시스템에 표시 할 수있는 메커니즘입니다. X11 포워딩의 경우 원격 호스트에 전체 X11 시스템을 설치할 필요는 없지만 최소한 xauth가 설치되어 있어야합니다. xauth는 X11 세션 (source)의 인증을 위해 서버와 클라이언트에서 사용하는 Xauthority 구성을 유지하는 유틸리티입니다.
WARNING |
X11 포워딩은 최소한 ssh (1), sshd_config (5) 및 ssh_config (5) 매뉴얼 페이지의 관련 섹션을 읽음으로써 확인해야하는 중요한 보안 의미가 있습니다. 이 StackExchange 질문도 참조하십시오. |
중요한점은 서버의 sshd 설정 파일(/etc/ssh/sshd_config
)에 X11Forwarding yes
로 설정되었는지 확인한다.
이후, 아래의 명령으로 접속하면 된다.
GUI가 잘못 표시되거나 오류가 발생하는 경우 ForwardX11Trusted
옵션 (명령 줄에서 -Y
스위치)을 활성화 할 수 있습니다. 이렇게하면 X11 포워딩이 X11 보안 확장 컨트롤의 적용을받지 않습니다. 이 경우 위의 경고를 읽으십시오.
SOCKS
-
-N
- Tells SSH not to execute a remote command. -
-D 9090
- Opens a SOCKS tunnel on the specified port number.
다음과 같은 명령으로 프록시 서버 연결:
/usr/bin/google-chrome --user-data-dir="$HOME/proxy-profile" --proxy-server="socks5://localhost:9090"
Flags
-
-X
- Enables X11 forwarding. This can also be specified on a per-host basis in a configuration file.
-
-Y
- Enables trusted X11 forwarding. Trusted X11 forwardings are not subjected to the X11 SECURITY extension controls.
Piping password
가장 추천하는 방법은 ssh-copy-id 명령을 사용하면 된다.
SSH keys
First of all, the best solution for you would be to create new ssh keypair and use this key to login to all your servers (or some, based on preferences). If you don't know how, you can find it many times here on stackexchange, but shortcut:
Basically you should set passphrase for your key, so you will log in only once with the one password.
SSH pass
But if you really insist on using your passwords from files, you can do it quite simply as described in comments:
But note that this is not really preferred method of using ssh with passwords stored in plaintext.
Expect
You can do the same thing using expect script like this:
#!/usr/local/bin/expect
spawn ssh [email protected]
expect "password:"
send "your_password\n";
interact
Tunneling example
- [추천] 자신과 자만 사이 :: SSH터널링을 이용하여 Firewall을 넘어보자
- [추천] Open Ssh Tunneling
- SSH 터널링으로 회사방화벽 우회하기
- Ubuntu Linux / Mac OS X 에서 ssh 터널링 사용하기
- How-To: SSH tunnels for secure network access
만약 아래와 같은 구조라 가정한다.
- 최종적으로 접속하려 하는 서버는 server 호스트명을 갖고 있다.
- server는 외부 네트워크에 접속할 수 없으며, private network(192.168.0.0/24)에 존재한다.
- server는 22번 포트로 ssh가 열려있다.
- server와 동일한 네트워크에 sshserver 호스트명을 갖는 또다른 서버가 존재한다.
- sshserver는 외부에서 8888포트로 ssh에 접속할 수 있다.
- 별도의 포트번호는 전부 방화벽으로 막혀있다.
- 외부 네트워크에서 server에 ssh로 접속하려고 한다.
우리의 목표는 로컬포트 9999를 임시로 열어놔, (localhost로만 listen가능함)이 포트사용해 sshserver를 경유한 후 server에 접속하는 것이 목표이다.
우선, 문법은 아래와 같다:
각 플래그는 아래와 같다.
-
-p [number]
: number 포트번호로 접속한다. -
-N
: 원격 쉘을 실행시키지 않고 접속만 유지한다. -
-L [로컬포트번호:호스트:호스트포트번호]
: 로컬 포트번호로 listen 소켓을 열고 들어오는 패킷을 원격지에서 호스트:호스트포트번호로 전송한다.- 분리 기호가
/
일수도 있다.
- 분리 기호가
이 경우 두 개의 터미널을 열어둬야 하며, 첫 번째 터미널은 아래와 같다.
접속에 성공하면 localhost:9999
가 listen 상태가 된다. lsof등으로 확인하면 된다.
이제 두 번째 터미널로 server에 접속하면 된다.
접속은 위와 같이 localhost로 해야한다.
Other example
원격지의 공유기 설정 페이지에 접근하고 싶다면 아래와 같이 터널을 열어 놓는다.
그 후 http://localhost:9999/ 주소로 접속하면 된다.
Device tunneling
Something like:
$ dd if=/dev/video0 | mplayer tv://device=/dev/stdin
$ works for me (SOA#1) locally. So does:
$ ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin
As well as
If you have a low bandwidth I recommend compression of the video stream:
$ ssh USER@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mplayer - -idle -demuxer matroska
Remote Port Forwarding (Reverse Tunneling)
-R
옵션을 사용한다.
Dynamic Port Forwarding
동적 포트 전달을 통해 사용자는 로컬 시스템과 원격 SSH 서버 사이에 보안 터널을 생성하여 SSH 서버를 프록시 서버로 전환할 수 있습니다.
이 기술을 사용하면 사용자는 SSH 연결을 통해 동적 SOCKS 프록시를 설정할 수 있습니다. 동적 포트 전달은 SSH 연결을 통해 많은 포트와 애플리케이션의 트래픽을 리디렉션할 수 있는 범용 암호화 터널을 생성합니다. 이는 특정 포트를 특정 대상으로 리디렉션하는 로컬 및 원격 포트 전달과 다릅니다.
동적 포트 전달은 다양한 목적으로 사용됩니다. 예를 들면: 차단된 웹사이트나 서비스에 액세스하고, 검열을 우회하고, 개인정보를 보호합니다. 동적 포트 전달을 사용하면 트래픽이 암호화되어 SSH 서버를 통해 라우팅되므로 제3자가 귀하의 활동을 추적하거나 가로채는 것이 더 어려워집니다.
-D
옵션을 사용한다.
VPN over SSH (양측 네트워크를 연결하기)
- [추천] VPN over SSH - ArchWiki
- VPN with SSH and TUN.md
- SSH Features: Bridging two networks ⋅ /dev/pboehm
root » ssh -o "PermitLocalCommand=yes" \
-o "LocalCommand=brctl addif br-local tap5 && ifconfig tap5 up" \
-o Tunnel=ethernet \
-w 5:5 \
-t root@REMOTE_HOST \
"brctl addif br-remote tap5 && ifconfig tap5 up"
Create Network Interface from SSH Tunnel
- ssh tunneling - Create Network Interface from SSH Tunnel - Unix & Linux Stack Exchange
- tap/scripts/ssh-tunnel.sh at master · trustedsec/tap
리버스 터널링으로 연결하기
Mitmproxy 을 사용하여 인터넷이 연결되지 않는 원격지의 서버의 HTTP/HTTPS 연결을 가능하게 해주는 방법이다.
- 편의상 인터넷이 연결된 클라이언트 측 PC 를 <로컬 PC>,
- 인터넷이 안되는 원격지 서버를 <원격지 서버> 라고 지칭한다.
<로컬 PC>에서 Mitmproxy 서버를 실행 (Host 포트는 3128 를 사용한다고 가정한다):
그리고 <로컬 PC>에서 #Remote Port Forwarding (Reverse Tunneling) 을 사용한 SSH 연결:
## Usage: ssh -R [원격지포트]:[로컬기준목적지]:[로컬기준포트] [username]@[ssh_server]
ssh -R 3129:localhost:3128 username@ssh_server
<원격지 서버>의 터미널에서 Proxy 환경 변수 적용. 또는 /etc/environment
수정.
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
## 또는 한번에 HTTP/HTTPS 프록시를 적용 하려면
export all_proxy=http://127.0.0.1:3129
apt로 패키지 설치하고 싶다면 Advanced Package Tool#프록시 서버 설정 항목 참고 하여 다래와 같이 사용하면 된다.
sudo apt -o Acquire::http::proxy=http://127.0.0.1:3129/ -o Acquire::https::proxy=http://127.0.0.1:3129/ -o Acquire::https::Verify-Peer=false ...
네트워크 연결 다이어그램은 아래 그림과 같다:
| |
설명에서 언급된 명칭 | 그림에서 언급된 명칭 |
<로컬 PC> | Host A |
<원격지 서버> | Host B |
Squid Proxy |
WARNING |
단, 위 방법으로 HTTPS 를 접속하면 CERTIFICATE_VERIFY_FAILED같은 SSL 인증 오류가 발생되니 Skip 옵션등을 사용해야 한다 |
Email alert
- How do I set up an email alert when a ssh login is successful?
- Enable SSH Login Notification on Linux
Ubuntu 14.04를 기준으로 아래와 같이 postfix를 설치한다.
/etc/profile.d/ssh_notify.sh
파일을 만든 후 아래의 내용을 작성한다.
#!/bin/bash
TAG=SSH_CONNECTION_INFO
DATE_FORMAT=`date +%Y%m%d_%H-%M-%S`
CONTENT="USER($USER) HOSTNAME($HOSTNAME) DATE($DATE_FORMAT): $SSH_CONNECTION"
SMTP_TITLE="SSH LOGIN ALERT"
SMTP_TO=[email protected]
if [[ -n "$SSH_CONNECTION" ]]; then
logger -t $TAG "$CONTENT"
echo "$CONTENT" | mail -s "$SMTP_TITLE" $SMTP_TO
fi
그리고 아래와 같이 실행 권한을 추가한다.
Warning |
|
OpenSSH Client Example
ssh client 사용방법에 대한 정리.
-
ssh -p 8022 [email protected]
- 포트번호 8022, 사용자명 yourid를 사용하여 server-project.com 호스트에 접속한다.
-
scp -r -P 8022 [email protected]:/Users/yourid/Documents/fonts ~/Downloads/LocalFonts
- Stackoverflow: Transferring files over SSH
- 원격 호스트의
/Users/yourid/Documents/fonts
디렉토리와 하위 데이터를 로컬 호스트의~/Downloads/LocalFonts
디렉토리로 모두 복사한다. (-r
옵션 중요)
로그인된 다른 세션의 Display 에 GUI 프로그램을 실행하는 방법
w를 사용하면 현재 로그인된 사용자 목록을 확인할 수 있다:
다음과 같이 출력된다:
16:34:22 up 36 days, 2:56, 2 users, load average: 41.63, 41.91, 42.59
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
aaa :1 :1 14Nov23 ?xdm? 49days 0.01s /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubuntu
aaa pts/0 172.17.17.2 16:29 1.00s 0.06s 0.01s w
사용자와 TTY 를 확인한다. 보통 :1 으로 표기된다.
권한 확인:
다음과 같이 출력된다:
만약 다른 사용자로 해당 사용자 디스플레이를 제어하고 싶다면:
(필요하다면) 로그인한다:
위에서 확인한 TTY 값을 DISPLAY
환경변수 값으로 설정
원하는 프로그램 실행:
보안상의 이유로 권한을 제거한다:
Troubleshooting
도메인으로 접속할 경우 먿어있는 현상
ssh git.yourname.com
와 같이 도메인 주소를 통해 접속할 경우, 그 이후, 아무런 작업이 안되는 경우가 있다. 이 경우 nslookup을 사용하여 도메인이 정상적으로 접속되는지 확인해 보자. 경우에 따라 도메인 이름 확인 (Domain name resolution) 절차를 확인해 보자.
만약
ArchLinux에서
위와 같은 현상이 발생된다면,
xorg-xauth
패키지를 설치해 보자.
See also
- semanage
- Secure Shell
- sshfs
- Mosh - SSH로 기존 인증방식을 이용해서 접속한 후, 원격에서 mosh-server를 실행하고 UDP로 연결
- ContainerSSH - 컨테이너를 생성해서 접속시켜주는 SSH Server
- scp
- rsync
- rclone
- Devzat - 개발자들을 위한 SSH 채팅 서버
- Keypub.sh - SSH 키를 이용한 터미널용 OAuth
- GGH - SSH 세션을 Recall하는 도구
- OpenPubkey SSH (OPKSSH) - SSH와 통합된 싱글 사인온 시스템
Favorite site
- OpenSSH website
- Wikipedia (en) OpenSSH에 대한 설명
- OpenSSH 서비스 설치기
- SSH 보안설정
- SSH 서버 설정 파일(sshd_config)
- SSH 보안 및 sudo 설정
- OpenSSH client on Mac OS X
- [추천] Man page: SSHD_CONFIG
- SSH 보안설정
- SSH Key - 비밀번호 없이 로그인
- SSH Tunneling 사용하기
- Enabling SSH Server on Fedora 17
References
-
SSH_Key_-_auth_key.pdf ↩