我使用以下代码连接到远程服务器:
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.WarningPolicy())
ssh.connect(
hostname=settings.HOSTNAME,
port=settings.PORT,
username=settings.USERNAME,
)
当我在本地服务器A上时,我可以从命令行ssh到远程,建议它在known_hosts
。代码按预期工作。
在本地服务器B上,我也可以从命令行ssh到远程服务器上。但是当我尝试使用上面的代码时,我得到了:
/opt/mysite/virtualenv/lib/python3.5/site-packages/paramiko/client.py:763: UserWarning: Unknown ssh host key for [hostname]:22: b'12345'
key.get_fingerprint())))
...
File "/opt/mysite/virtualenv/lib/python3.5/site-packages/paramiko/client.py", line 416, in connect
look_for_keys, gss_auth, gss_kex, gss_deleg_creds, t.gss_host,
File "/opt/mysite/virtualenv/lib/python3.5/site-packages/paramiko/client.py", line 702, in _auth
raise SSHException('No authentication methods available')
paramiko.ssh_exception.SSHException: No authentication methods available
与" SSH - Python with paramiko issue"不同。我正在使用load_system_host_keys和WarningPolicy,所以我不需要以编程方式添加密码或密钥(我不需要在本地服务器A上)。
是否有一些系统配置步骤我错过了?
答案 0 :(得分:0)
我在本地服务器B上使用了错误的用户进行了测试。运行Python进程的用户毕竟没有ssh权限。 (该用户的命令行ssh失败。)一旦我赋予它权限,连接就按预期工作。
答案 1 :(得分:0)
尝试使用结构(这是基于invoke + paramiko编写的)而不是paramiko并设置以下参数:
con = fabric.Connection('username@hostname' ,connect_kwargs={'password': 'yourpassword', 'allow_agent': False}
如果它持续下降,请尝试检查密码是否仍然有效,并且不需要更改密码。