如何使用 paramiko 到 SSH

问题描述 投票:0回答:2

我在下面构建了简单的 python 代码来连接到我的网络服务器之一。

import paramiko

# Set up SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Set up connection details
ip = "10.218.16.16"
user = "user1"
password = "234!!!lem600@HW"

# Connect to server
try:
    ssh.connect(ip, username=user, password=password)
    print(f"Successfully logged in as {ssh.exec_command('whoami')[1].read().decode().strip()}")

except paramiko.ssh_exception.AuthenticationException:
    print("Authentication failed")
    
except paramiko.ssh_exception.SSHException:
    print("Unable to establish SSH connection")
    
finally:
    ssh.close()

这很好用。 连接到这个网络服务器后,我在腻子中执行以下步骤。

  1. ssh user2@hadoopc1h1
  2. 正在输入密码 -235!!!lem600@HW

所以我需要的是在相同的代码中执行上述操作...... 我也添加了下面的部分..

ip2 = "hadoopc1h1"
user2 = "user2"
password2 = "235!!!lem600@HW"


try:
    # Execute ssh command to connect to second server
    _, stdout, _ = ssh1.exec_command(f'ssh {user2}@{ip2}')

   
    stdin = stdout.channel.makefile("wb")
    stdin.write(f"{password2}\n".encode())
    stdin.flush()

    # Print output of ssh command to second server
    print(stdout.read().decode())

这是我得到的

OSError: Socket is closed

网络连接也可用...有人可以帮助我吗?

python ssh paramiko
2个回答
1
投票

捆绑自动化交互式 shell 通常是错误的方法,会给你带来麻烦。您对

exec_command
的尝试绝对是一个更好的开始。另见
为使用 JSch 通过 SSH 执行的命令提供输入/子命令

虽然你可能真的在寻找
如何使用 JSch SSH 到另一个 SSH 服务器后面的服务器?


0
投票

@牛说的对

调用 shell 后,还必须执行睡眠命令,以确保发送的命令在执行下一个命令之前已执行。

time.sleep(1) //sleep for 1 sec

此外,需要发送“ “在您发送的每个命令的末尾。 例子:

remote_connection.send("command\n")

如果发送两个命令,它应该看起来像这样。

remote_connection.send("command\n")
time.sleep(1)
remote_connection.send("command\n")
time.sleep(1)
© www.soinside.com 2019 - 2024. All rights reserved.