一尘不染

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

python

我试图使用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()

有什么帮助吗?


阅读 168

收藏
2020-12-20

共1个答案

一尘不染

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


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

  1. ssh提示输入密码时,OpenSSH需要终端,因此您需要设置get_pty参数SSHClient.exec_command(可能会给您带来很多讨厌的副作用)。

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

  3. 然后,您需要将(子)命令写入ssh输入。
    请参阅Python Paramiko中SSH服务器上的辅助shell
    /命令中的执行(子)命令

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

但是这种方法通常容易出错。

2020-12-20