python - 使用 Paramiko 通过另一台服务器连接到服务器

标签 python ssh paramiko

我正在尝试使用 Paramiko 进入服务器,然后进入服务器中的路由器,然后运行命令。

但是,我没有收到路由器的密码输入,然后它只是关闭连接。

username, password, port = ...
router = ...
hostname = ...
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy)
client.connect(hostname, port = port, username = username, password = password)

cmd = # ssh hostname@router

# password input comes out here but gets disconnected

stdin, stdout, stderr = client.exec_command(cmd) 

HERE # command to run in the router
stdout.read()

client.close()

有什么帮助吗?

最佳答案

首先,您最好使用端口转发(又名 SSH 隧道)通过另一台服务器连接到一台服务器。

参见Nested SSH using Python Paramiko .

<小时/>

无论如何,回答你的字面问题:

  1. OpenSSH ssh 在提示输入密码时需要终端,因此您需要设置 SSHClient.exec_commandget_pty 参数(这会给你带来很多令人讨厌的副作用)。

  2. 然后您需要将密码写入命令(ssh)输入中。

  3. 然后您需要将(子)命令写入 ssh 输入。
    请参阅Execute (sub)commands in secondary shell/command on SSH server in Python Paramiko .

stdin, stdout, stderr = client.exec_command(cmd, get_pty=True) 
stdin.write('password\n')
stdin.flush()
stdin.write('subcommand\n')
stdin.flush()

但这种方法一般来说很容易出错。

关于python - 使用 Paramiko 通过另一台服务器连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57210100/

相关文章:

python - 如何在 Mac OSX 上安装 paramiko?

python - 使用 MySQL 和 Python 并发读写(不同进程)的问题

Python:通过变量访问类属性

python - 如何检查一个对象是否是python中的生成器对象?

c# - 使用 sshnet 库的 SFTP 上传 - 处理连接问题

Python - pysftp/paramiko - 使用指纹验证主机 key

python - 使用自定义 dict 类作为 Python 类的 __dict__ 属性的奇怪行为

ssh - 如何将旧机器的私钥导入新机器?

git 从终端推送错误的用户

python - 使用 SFTP 缓慢上传许多小文件