如何在没有密码的情况下使用paramiko连接到远程服务器?

时间:2013-08-21 15:47:30

标签: python ssh

我正在用Python编写一个脚本,需要使用SSH连接到remote_server并将fileremote_server移到host_server。我需要在没有密码的情况下这样做,因为它需要适用于任何远程服务器和任何主机服务器用户。

我的代码:

#get IP and username for remote access
IP = input("Enter host_server IP: ").split()
username = input("Enter username: ").split()
#password = ???????

#create a file on host_server for file
file_a = open(date+"file.txt", "a") #ignore the date variable
file = str(date+"file.txt")

#move file to host_server
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(IP[0], username = user[0], password = password[0])
print "Connected to server."
transfer = ssh.open_sftp()
transfer.get("file.txt", file)
transfer.close()
print "Transfer completed."

问题:有没有办法在不访问命令行终端的情况下在脚本中设置公钥,这样每次脚本运行时都会设置SSH无密码访问?

1 个答案:

答案 0 :(得分:18)

ssh.connect()会使用关键字参数pkey来指定您的私人文件。

#get IP and username for remote access
IP = input("Enter host_server IP: ").split()
username = input("Enter username: ").split()


#create a file on host_server for file
file_a = open(date+"file.txt", "a") #ignore the date variable
file = str(date+"file.txt")
import paramiko
import os
privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
ssh.connect(IP[0], username = user[0], pkey = mykey)