這幾天寫一個遊戲維護的平臺,剛開始是直接用賬號和密碼直接明文登陸的,發現這樣很不安全,現在改爲密鑰登陸執行命令和上傳文件,在這裏做個記錄,方便以後查閱。先來看一下功能:
執行命令和上傳文件的步驟:
第一步:製作密鑰對
首先在服務器上製作密鑰對。首先用密碼登錄到你打算使用密鑰登錄的賬戶,然後執行以下命令:
第二步:在服務器上安裝公鑰
鍵入以下命令,在服務器上安裝公鑰:
第三步:設置 SSH,打開密鑰登錄功能
編輯 /etc/ssh/sshd_config 文件,進行如下設置:
第四步:將私鑰下載到客戶端,如這裏的SecureCRT
輸入Hostname,Username,選擇認證方式爲PublicKey公鑰認證,選擇剛剛下載下來的id_rsa私鑰文件即可!
如果能成功登陸,說明你的密鑰已經配好了,接下來就是paramiko通過密鑰執行命令和傳文件的代碼:
# 執行命令
def exec_command(comm, hostname, username, password):
ssh = paramiko.SSHClient()
# 使用密鑰登陸Linux
ssh.load_system_host_keys()
privatekey = os.path.expanduser(password)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
key = paramiko.RSAKey.from_private_key_file(privatekey)
ssh.connect(hostname=hostname, username=username, pkey=key)
stdin, stdout, stderr = ssh.exec_command(comm)
result = stdout.read() + stderr.read()
# print(result.decode('utf-8'))
ssh.close()
return result
# 上傳文件
def put_file(local_path, remote_path, hostname, username, password, port=22):
ssh = paramiko.SSHClient()
# 使用密鑰登陸Linux
ssh.load_system_host_keys()
privatekey = os.path.expanduser(password)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
key = paramiko.RSAKey.from_private_key_file(privatekey)
ssh.connect(hostname=hostname, username=username, pkey=key)
t = ssh.get_transport()
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(local_path, remote_path)
sftp.close()
這個是前面生成的私鑰存放地址:
我這裏是定義的兩個函數,調用函數的時候把對應的參數傳入進行調用即可。
上面配置密鑰的步驟都是是複製的langkeziju的專欄,在此感謝你的博客幫我解決了paramiko密鑰登陸Linux的問題。