最近项目有一个小需求,在本地python脚本中,从远程服务端拿nginx的accesslog来分析pv和uv。 根据以往的经验,必须在脚本中实现免密登录才可以。python如何实现免密登录远程服务器呢。
环境
1、本地执行 ssh-keygen -t rsa, 将公钥拷贝到服务端的~/.ssh/authorized_keys 中
- 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)