我试图使用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隧道)通过另一台服务器连接到服务器。
无论如何回答您的字面问题:
ssh提示输入密码时,OpenSSH需要终端,因此您需要设置get_pty参数SSHClient.exec_command(可能会给您带来很多讨厌的副作用)。
ssh
get_pty
SSHClient.exec_command
然后,您需要将密码写入命令(ssh)输入。
然后,您需要将(子)命令写入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()
但是这种方法通常容易出错。