SSH客戶端 通過密匙連線遠端linux主機

2021-08-20 14:38:18 字數 2553 閱讀 1642

在這篇文章中,主要談及如何利用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...