在這篇文章中,主要談及如何利用ssh-keygen生成密匙對,並且在windows本地機利用密匙遠端連線linux主機,而**將用python來實現。
ssh金鑰可以認為是和另一台電腦通訊時的唯一的識別證,利用ssh金鑰對可以讓我們方便的登入到 ssh 伺服器,這樣不需要輸入密碼,也更加安全。而這裡我們利用ssh-keygen來生成ssh 金鑰。
服務端在後台執行並響應來自客戶端的連線請求,預設在22埠進行監聽,服務端一般是sshd程序,提供了對遠端連線的處理,一般包括金鑰認證、金鑰交換、對稱金鑰加密和非安全連線。
客戶端包含ssh程式以及像scp(遠端拷貝)、slogin(遠端登陸)、sftp(安全檔案傳輸)等應用程式。
利用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
在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')
在遠端主機linux上的終端執行以下命令,通過-f指定了生成檔案的檔名,通過-p指定了無密碼:
在/root/.ssh下可以看到,已經生成了私匙和公鑰。
公鑰一般命名為authorized_keys,這是因為sshd的配置檔案預設名字是這個,為了避免出現奇怪的問題,最好這樣命名。所以我們進入/root/.ssh/目錄下,把id_rsa.pub拷貝到authorized_keys檔案中,在終端執行命令如下:
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
設定一下檔案許可權:
我們在linux上已經配置好了公鑰,現在是時候在本地主機win10上配置私匙了。
選擇乙個磁碟,把剛才製作的私匙檔案id_rsa放在「g:\root\ssh」目錄下,注意一定要把磁碟的名字改為英文,中文會出問題。
開啟/etc/ssh/sshd_config,我們需要配置它。在sshd_config檔案中,預設將金鑰認證這種登入方式給注釋了,所以我們需要去掉前面的注釋符號#。
執行python2 ssh_key.py,結果如下,我們成功的在win10上利用私匙遠端連線了linux。
Python 實現ssh客戶端(連線遠端伺服器)
ssh客戶端實現方案一,遠端執行命令 密碼認證 coding utf 8 import paramiko 先安裝pycrypto,再安裝paramiko 建立ssh物件 ssh paramiko.sshclient 允許連線不在 ssh known hosts檔案中的主機 ssh.set missi...
SSH遠端連線超時後自動斷開客戶端問題
修改檔案 vi etc ssh sshd config clientaliveinterval 0 clientaliveinterval 客戶端活動間隔 表示服務端向客戶端請求資訊的時間間隔,預設為0,不傳送。改為60秒傳送一次保持長連線。clientalivecountmax 3 clienta...
客戶端通過unix socket方式連線MySQL
我的系統是ubuntu 8.10 desktop x86版,使用apt get安裝mysql服務端,配置檔案路徑 etc mysql my.inf 1.檢視mysql server的配置檔案 27 mysqld safe 28 socket var run mysqld mysqld.sock 29...