我正在尝试使用Paramiko打开(并维护)一个频道,这样我就可以发出一些命令;但是,我无法找到使用paramiko.Transport并使用私钥的示例。我已经能够连接到我的服务器,只需使用以下代码运行命令:
ssh = paramiko.SSHClient()
paramiko.util.log_to_file("support_scripts.log")
private_key = paramiko.RSAKey.from_private_key_file(rsa_private_key)
ssh.connect(server, username=user, password='', pkey=private_key)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd)
没有问题。根据我的理解,这不会创建“交互式会话”,这意味着我无法发出cd /home/my_user/my_scripts
然后发出另一个命令,如python script_in_my_scripts_folder.py
。因此,我正在尝试使用Paramiko Transport对象来帮助我维护交互式会话。搜索高低,我找到的所有例子都没有。现在,以下代码在第204行返回“SSHException:Channel is not open”,这是下面的exec_command:
PRIVATEKEY = '/home/my_user/.ssh/id_rsa'
user = 'harperville'
server = '10.0.10.10'
port = 22
paramiko.util.log_to_file("support_scripts.log")
trans = paramiko.Transport((server,port))
rsa_key = paramiko.RSAKey.from_private_key_file(PRIVATEKEY)
trans.connect(username=user, pkey=rsa_key)
session = trans.open_channel("session")
session.exec_command('cd /home/harperville/my_scripts/')
我理解它所告诉我的要点,但我无法找到或理解文档来帮助我解决这个问题。
提前致谢。
答案 0 :(得分:3)
我在本网站的帮助下找到了问题:http://j2labs.tumblr.com/post/4477180133/ssh-with-pythons-paramiko
如果我改变:
session = trans.open_channel("session")
为:
session = trans.open_session()
然后,我可以使用以下命令运行命令:
session.exec_command('cd /home/harperville/my_scripts/')