我在下面构建了简单的 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()
这很好用。 连接到这个网络服务器后,我在腻子中执行以下步骤。
所以我需要的是在相同的代码中执行上述操作...... 我也添加了下面的部分..
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
网络连接也可用...有人可以帮助我吗?
捆绑自动化交互式 shell 通常是错误的方法,会给你带来麻烦。您对
exec_command
的尝试绝对是一个更好的开始。另见虽然你可能真的在寻找
如何使用 JSch SSH 到另一个 SSH 服务器后面的服务器?
@牛说的对
调用 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)