我刚刚开始使用Paramiko连接到另一个主机。我可以通过本地网络中的内部IP地址访问这个主机,这工作正常(在Python中和通过控制台中的ssh
)。
但是,当我试图通过主机的外部IP地址访问主机时,通过Paramiko的访问会失败,而控制台中的ssh
仍然可以工作。这里唯一的区别是,我使用机器的外部IP地址,而不是主机的内部IP地址。
有人能帮忙吗?可能是Paramiko与我在路由器上配置的端口转发有冲突吗?
这是我目前的代码:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
target_host = 'external.IP'
# target_host = 'internal.IP'
# Internal access port for ssh transfer.
# target_port = 22
# External access port for ssh transfer.
target_port = ABCD
pwd = 'my.password'
un = 'my.username'
ssh.connect( hostname = target_host , username = un, password = pwd )
stdin, stdout, stderr = ssh.exec_command('ls -1 .')
print "STDOUT:\n%s\n\nSTDERR:\n%s\n" %( stdout.read(), stderr.read() )
添加:
收到的完整错误消息是:
回溯(最近一次呼叫时间): 文件“/test.py”,第25行,in ssh.connect(主机名=目标主机,用户名=un,密码=pwd) 文件“/usr/local/lib/python2.7/site packages/paramiko/client.py”,第251行,连接中 重试信号(lambda:sock.connect(addr)) 文件“/usr/local/lib/python2.7/site packages/paramiko/util.py”,第270行,在retry-on-u信号中 返回函数() 文件“/usr/local/lib/python2.7/site packages/paramiko/client.py”,第251行,in 重试信号(lambda:sock.connect(addr)) 文件“/usr/local/cell/python/2.7.9/Frameworks/python.framework/Versions/2.7/lib/python2.7/socket.py”,第224行,用meth表示 return getattr(self.\u sock,name)(参数) socket.error:[Errno 61]连接被拒绝
Python和控制台访问之间的唯一区别是端口。可能是Paramiko总是通过ssh的端口22?如果是,有没有办法引导帕拉米科通过另一个港口?
好的。。。我现在已经解决了这个问题:问题确实是在我的脚本中没有指定要通过的端口。因此,Paramiko默认为端口22-在我的路由器上没有打开。
感谢@betabandido在this post中提供了完整的方法签名。
解决我的问题的方法是在
connect
语句中包含端口规范,如下所示:ssh.connect( hostname = target_host, port = target_port, username = un, password = pwd )
感谢所有的贡献者!
在我的主机上输出您的脚本并进行此更改: stdin,stdout,stderr=ssh.exec_命令('ls-1/root | head-n 5')
1.py年
Python1.py
我认为您需要ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())避免
SSH PROGRAMMING WITH PARAMIKO | COMPLETELY DIFFERENT
相关问题 更多 >
编程相关推荐