SSH客戶端 (通過密匙連線遠端linux主機)
導讀:
在這篇文章中,主要談及如何利用ssh-keygen生成密匙對,並且在windows本地機利用密匙遠端連線linux主機,而程式碼將用python來實現。
1. ssh-keygen
1.1SSH金鑰
SSH金鑰可以認為是和另一臺電腦通訊時的唯一的識別證,利用SSH金鑰對可以讓我們方便的登入到 SSH 伺服器,這樣不需要輸入密碼,也更加安全。而這裡我們利用ssh-keygen來生成ssh 金鑰。
服務端在後臺執行並響應來自客戶端的連線請求,預設在22埠進行監聽,服務端一般是sshd程序,提供了對遠端連線的處理,一般包括金鑰認證、金鑰交換、對稱金鑰加密和非安全連線。
客戶端包含ssh程式以及像scp(遠端拷貝)、slogin(遠端登陸)、sftp(安全檔案傳輸)等應用程式。
1.2利用ssh-keygen生成ssh 金鑰
利用ssh-keygen生成ssh 金鑰:
命令:ssh-keygen -t [rsa|dsa]
加密方式rsa、dsa均可選,預設是dsa。執行命令將會生成私鑰檔案和公鑰檔案 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub。
如果在root使用者下生成密匙對,那麼檔案在/root/.ssh下。
生成密匙的時候,可以通過-f指定生成檔案的檔名,例如:
ssh-keygen-t rsa -f ~/.ssh/id_rsa
2.用Python寫的SSH客戶端
在ssh_key.py新增如下程式碼:
#-*- coding:utf-8 -*- import paramiko #使用金鑰連線遠端主機 def ssh_command(ip,port,username,command): # 建立SSH物件 client = paramiko.SSHClient() # 允許連線不在know_hosts檔案中的主機 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #利用密匙 key="G:/root/ssh/id_rsa" client.load_system_host_keys() #連線伺服器 client.connect(ip, port, username, key_filename=key) # 直接使用SSHClient物件的exec_command()在服務端執行命令 stdin,stdout,stderr = client.exec_command(command) receive = stdout.read() # 列印輸出 print receive.decode('utf-8') # 關閉連線 client.close() ssh_command('192.168.1.175',22,'root','ls')
3.在win10下利用密匙遠端連線Linux主機
3.1製作金鑰對
在遠端主機linux上的終端執行以下命令,通過-f指定了生成檔案的檔名,通過-P指定了無密碼:
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P""
在/root/.ssh下可以看到,已經生成了私匙和公鑰。
3.2在遠端主機linux上配置公鑰
公鑰一般命名為authorized_keys,這是因為sshd的配置檔案預設名字是這個,為了避免出現奇怪的問題,最好這樣命名。所以我們進入/root/.ssh/目錄下,把id_rsa.pub拷貝到authorized_keys檔案中,在終端執行命令如下:
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
設定一下檔案許可權:
chmod 600 authorized_keys
chmod 700 ~/.ssh
3.3在本地主機win10上配置私匙
我們在Linux上已經配置好了公鑰,現在是時候在本地主機win10上配置私匙了。
選擇一個磁碟,把剛才製作的私匙檔案id_rsa放在“G:\root\ssh”目錄下,注意一定要把磁碟的名字改為英文,中文會出問題。
3.4配置sshd_config
開啟/etc/ssh/sshd_config,我們需要配置它。在sshd_config檔案中,預設將金鑰認證這種登入方式給註釋了,所以我們需要去掉前面的註釋符號#。
3.5利用python程式碼去遠端連線Linux
執行python2 ssh_key.py,結果如下,我們成功的在win10上利用私匙遠端連線了linux。