最近公司有一个需求, 需要把服务器 A 上的任务放到服务器 B 上, 因为 B 上有 HTTP, 并且可以被外网访问, 但是直接通过 shell 的 scp, 每次都需要输入密码. 这里用 python 简单实现一下
直接上代码:
- import paramiko
- import sys
- def deleteRemoteFile(dt):
- SSH = paramiko.SSHClient()
- SSH.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 第一次登录的认证信息
- SSH.connect(hostname='192.168.72.208', port=22, username='gold', password='gold!23') # 连接服务器
- stdin, stdout, stderr = SSH.exec_command('rm /home/gold/data//*') # 执行命令
- SSH.close()
- def uploadFile2Remote(dt):
- transport = paramiko.Transport(('192.168.72.208', 65522))
- transport.connect(username='gold', password='gold!23')
- sftp = paramiko.SFTPClient.from_transport(transport)
- sftp.put('/home/gold/data/broad.png', '/home/gold/data/broad_%s.png' % dt)
- transport.close()
- if __name__ == '__main__':
- unix_ts = sys.argv[1]
- deleteRemoteFile(unix_ts)
- uploadFile2Remote(unix_ts)
注意:
* 这里有一个坑, 就是 sftp 在 put 的时候, 需要把在 208 服务器上的文件名写出来, 代码执行的逻辑想当于先 touch 一个文件, 然后往这个文件里写数据, 如果不加文件名, 直接到文件夹, 就会报错
具体的可以参考:
python 实现 SSH 及 sftp 功能 https://www.cnblogs.com/fang123456/p/7235688.html
来源: http://www.bubuko.com/infodetail-3027709.html