今天刚好看到了 python2 得 paramiko 模块 就拿来试了一下 发现 在windown 和linux 利用 paramiko 进行 ssh 连接得不同之处 linux 利用 ~/.ssh/known_hosts 出已安全!
如已登陆过
s.load_system_host_keys('/.ssh/known_hosts')
ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
设置连接的远程主机没有本地主机密钥或HostKeys 对象时的策略 目前支持三种 分别是:
paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接
试一下连续运行 bash 命令 'df -H '
# _*_ coding:utf-8 _*_ import paramiko #远程服务器 hostname = "191.168.1.220" #端口 port = 22 #用户名 username = "root" #密码 password = "66666" #创建SSH连接日志文件(只保留前一次连接的详细日志,以前的日志会自动被覆盖) paramiko.util.log_to_file("paramiko.log") s = paramiko.SSHClient() #Linux 读取know_host ssh-keygen -t rsa #s.load_system_host_keys() #windown 添加——政策 s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #建立SSH连接 s.connect(hostname,port,username,password) #运行一下 bash 'df -H' stdin,stdout,stderr = s.exec_command('df -H') #打印输出一下 print stdout.read() s.close()
现在试一下 post 一个 File 到 Linux 先来写个方法
def ssh_post(Server_ip,port,USER,PASSWORD,clinent_file,server_file): server=paramiko.Transport(Server_ip,port) server.connect(username=USER,password=PASSWORD) FTP_POST=paramiko.SFTPClient.from_transport(server) FTP_POST.put(clinent_file,server_file) server.close()
如果同时想在Linux上下载 File 只要在FTP_POST 对象调用 get('server_file','client_file') 方法即可
现在来测试一下
if __name__ == "__main__": port=22 Server_ip='191.168.1.220' User_name='root' User_password='66666' CLINENT_FILE='c:\\red.txt' SERVER_FILE='/home/yum.txt' ssh_post(Server_ip,port,User_name,User_password,CLINENT_FILE,SERVER_FILE)