前言
1、linux服務器下一般都會安裝ssh服務,ssh服務可以建立安全的遠程連接,方便日常通過一台linux設備維護其他的服務器設備。
(1)遠程主機收到用戶的登錄請求,把自己的公鑰發給用戶。 (2)用戶使用這個公鑰,將登錄密碼加密后,發送回來。 (3)遠程主機用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。
安裝SSH服務
1、如果你用的是redhat,fedora,centos等系列linux發行版,那么敲入以下命令: sudo yum install sshd 或 sudo yum install openssh-server(由osc網友 火耳提供) 2、如果你使用的是debian,ubuntu,linux mint等系列的linux發行版,那么敲入以下命令: sudo apt-get install sshd 或 sudo apt-get install openssh-server(由osc網友 火耳提供) 然后按照提示,安裝就好了。
由於本機在之前就已經安裝好了SSH服務,所以提示如下:

開啟SSH服務
service sshd start
執行命令結果如下:

卸載SSH服務
1、如果你用的是redhat,fedora,centos等系列linux發行版,那么敲入以下命令: yum remove sshd
2、如果你使用的是debian,ubuntu,linux mint等系列的linux發行版,那么敲入以下命令: sudo apt-get –purge remove sshd
執行命令結果如下:

Linux操作系統從一台服務器SSH遠程連接至另一台服務器
示例1
直接連接遠程主機端口
前提條件:
兩台服務器A、B;當前所在位置:服務器A;SSH服務已安裝。
判斷:
在服務器A中執行命令 ping B的IP地址 ,在能ping通的前提條件下
進入服務器A后,輸入:
ssh -l 主機名 IP
- 主機名:要跳轉的Linux服務器的主機名
- IP:要跳轉的Linux服務器的ip地址
或者:
ssh 用戶名@服務器地址
然后回車輸入服務器B的用戶密碼就可以跳轉到另一台服務器B。如 ssh root@127.0.0.1
示例2
1、假定你要以用戶名user,登錄遠程主機host,只要一條簡單命令:
$ ssh username@remote_host
如:ssh pika@192.168.0.111
2、如果本地主機用戶名與遠程主機用戶名一致,登錄時可以省略用戶名:
$ ssh remote_host 如:ssh 192.168.0.111
3、SSH服務的默認端口是22:你的登錄請求會送進遠程主機的22端口。使用p參數,可以修改這個端口。(指定端口連接)
ssh username@remote_host -p 2222 如:$ ssh user@host -p 2222 該條命令表示,ssh直接連接遠程主機的2222端口。
4、第一次登錄遠程主機:
如果你是第一次登錄對方主機 $ ssh root@12.18.429.21 系統會出現下面的提示:: The authenticity of host 'host (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)? 這段話的意思是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎? 所謂"公鑰指紋",是指公鑰長度較長(這里采用RSA算法,長達1024位),很難比對,所以對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。 很自然的一個問題就是,用戶怎么知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在自己的網站上貼出公鑰指紋,以便用戶自行核對。 假定經過風險衡量以后,用戶決定接受這個遠程主機的公鑰。 Are you sure you want to continue connecting (yes/no)? yes 系統會出現一句提示,表示host主機已經得到認可。 Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts. 然后,會要求輸入密碼。 Password: (enter password) 如果密碼正確,就可以登錄了。 當遠程主機的公鑰被接受以后,它就會被保存在文件$HOME/.ssh/known_hosts之中。下次再連接這台主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。 每個SSH用戶都有自己的known_hosts文件,此外系統也有一個這樣的文件,通常是/etc/ssh/ssh_known_hosts,保存一些對所有用戶都可信賴的遠程主機的公鑰。
示例3
1、使用密碼登錄,用戶每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。

運行結束以后,在$HOME/.ssh/目錄下,會新生成兩個文件:id_rsa.pub和id_rsa。前者是你的公鑰,后者是你的私鑰。

4、這時再輸入下面的命令,將公鑰傳送到遠程主機host上面:
$ ssh-copy-id user@host
好了,從此你再登錄,就不需要輸入密碼了。
5、如果還是不行,就打開遠程主機的 /etc/ssh/sshd_config 這個文件,檢查下面幾行前面"#"注釋是否取掉。
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
然后,重啟遠程主機的ssh服務:
// ubuntu系統 service ssh restart // debian系統 /etc/init.d/ssh restart
示例4
通過密鑰連接:
ssh -i path/to/key_file username@remote_host
示例5
ssh跳板:通過跳板機器連接遠程主機;多個跳板使用逗號隔開
ssh -J username@jump_host username@remote_host
實例
本實例的客戶端和服務端均為Ubuntu操作系統。
ssh客戶端:
用戶名(user_name): alpha
IP地址(client_ip): 192.168.0.33
ssh服務端:
用戶名(user_name): omega
IP地址(server_ip): 119.9.90.190
ssh服務器遠程登錄
1 普通登錄: ssh user_name@server_ip
[alpha@客戶端] :~$ ssh omega@119.9.90.190 輸入omega@119.9.90.190的密碼: loading omega@119.9.90.190 ... welcome! [omega@服務端] :~$
2 免ip登錄: ssh Host
2.1 客戶端alpha用戶進入隱藏ssh目錄
[alpha@客戶端] :~$ cd ~/.ssh [alpha@客戶端] :~/.ssh$ pwd /home/exia/.ssh
2.2 新建/修改config文件: sudo vim config
config文件單元構成:
Host: 登錄名 ----HostName: 將要登錄ssh服務器ip ----User: 將要登錄服務器用戶名 ----Port: 將要登錄服務器端口
config文件中可以設置多個Host:
[alpha@客戶端] :~$ cat config Host omi HostName 119.9.90.190 User omega Port 22 Host theroot HostName 119.9.90.190 User root Port 22
2.3 實現免ip登錄
[alpha@客戶端] :~$ ssh omi 輸入omega@119.9.90.190的密碼: loading omega@119.9.90.190 ... welcome! [omega@服務端] :~$
3 免密登錄: ssh -i id_rsa Host 和 ssh Host
3.1 客戶端alpha用戶進入隱藏ssh目錄
3.2 生成ssh登錄密鑰與公鑰(若之前未生成)
[alpha@客戶端] :~/.ssh$ ls config [alpha@客戶端] :~/.ssh$ ssh-keygen [alpha@客戶端] :~/.ssh$ ls config id_rsa id_rsa.pub
3.3 將公鑰發送給需要免密登錄的服務器的用戶
[alpha@客戶端] :~/.ssh$ ssh-copy-id omega@119.9.90.190;echo "ssh-copy-id omi 也行" ssh-copy-id omi 也行 [alpha@客戶端] :~/.ssh$ echo "開始免密登錄" # 開始免密登錄 [alpha@客戶端] :~/.ssh$ [alpha@客戶端] :~/.ssh$ [alpha@客戶端] :~/.ssh$ ssh -i id_rsa omi loading omega@119.9.90.190 ... welcome! [omega@服務端] :~$ cd ~/.ssh [omega@服務端] :~/.ssh$ ls authorized_keys
此時,[omega@服務端] :~/.ssh/authorized_keys 中已經存放了[alpha@客戶端] :~/.ssh/id_rsa.pub中的公鑰了。
當然直接打開[alpha@客戶端] :~/.ssh/id_rsa.pub 將其中的內容復制粘貼到 [omega@服務端] :~/.ssh/authorized_keys 中最后一行也是可以的。
3.4 最后, 在config文件中各Host的最后添加IdentityFile ~/.ssh/id_rsa:
[alpha@客戶端] :~$ cat config Host omi HostName 119.9.90.190 User omega Port 22 IdentityFile ~/.ssh/id_rsa Host theroot HostName 119.9.90.190 User root Port 22 IdentityFile ~/.ssh/id_rsa
即可進一步簡化ssh遠程登錄命令:
[alpha@客戶端] :~/.ssh$ ssh omi loading omega@119.9.90.190 ... welcome! [omega@服務端] :~$
如果服務端相應免密用戶的密碼或是用戶名有更改, 需要對客戶端中對應用戶~/.ssh下:
(2)刪除
known hosts文件
補充1:不用輸入ssh -i命令行即可攜帶pem文件快速登錄的方法
1、如果要登錄的Linux服務器只允許pem認證。
ssh -i ~/.ssh/id_rsa.pub azureuser@10.111.12.123
其中的 -i 選項表明,選擇一個和公鑰匹配的私鑰文件路徑。默認是~/.ssh/id_rsa。
2、但是每次輸入 ssh -i xxxx.pem 用戶@ip 地址 就很煩。
3、有個一勞永逸的方法:
進入到自己的用戶目錄,例如/home/me
把.pem文件放在當前目錄
然后vi .ssh/config
內容如下:
Host * ServerAliveInterval 60 Host denglu HostName 你的ip User mojie IdentityFile ~/.ssh/你的pem文件名.pem
保存后,更改權限: sudo chmod 600 key.pem
然后在當前目錄/home/me下輸入 ssh denglu
即可登錄到目標服務器。再也不用每次輸入長長的命令了
補充2:Linux操作系統中的路徑符號

補充3: exit 退出遠程連接服務器,回到本機的命令終端

文章主要轉載自:https://www.jianshu.com/p/10023495fba9
