Python免秘钥ssh远程登录执行命令

最近项目有一个小需求,在本地python脚本中,从远程服务端拿nginx的accesslog来分析pv和uv。 根据以往的经验,必须在脚本中实现免密登录才可以。python如何实现免密登录远程服务器呢。

环境

1、本地执行 ssh-keygen -t rsa, 将公钥拷贝到服务端的~/.ssh/authorized_keys 中

  1. pip install pycrypto
    pip install paramiko
    pip install ssh

代码实现

def do_statistics():
    try:
        # 建立一个sshclient对象
        ssh = paramiko.SSHClient()
        # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
        # pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')
        pkey = paramiko.RSAKey.from_private_key_file('私钥地址')
        # 建立连接
        ssh.connect(hostname=远端IP,
                    port=22,
                    username='user',
                    pkey=pkey)
        # 执行命令
        stdin, stdout, stderr = ssh.exec_command("cat /opt/log/com_access.log")
        # 结果放到stdout中,如果有错误将放到stderr中
        print(stdout.read().decode())
        print(stderr.read())
        # 关闭连接
        ssh.close()
    except Exception as e:
        log.exception(e)

参考资料

Python免秘钥ssh远程登录执行命令and本地执行shell命令

猜你喜欢

转载自blog.csdn.net/weixin_34343000/article/details/86897720