我可以ssh到服务器,然后使用paramiko在服务器上执行sshfs吗?

时间:2015-04-23 23:52:51

标签: python ssh paramiko sshfs

我尝试ssh到服务器,然后使用paramiko在服务器上安装带有sshfs的工作区。

我的代码:

import sys
sys.stderr = open('/dev/null')
import paramiko as pm
sys.stderr = sys.__stderr__
import os

class AllowAllKeys(pm.MissingHostKeyPolicy):
    def missing_host_key(self, client, hostname, key):
        return

HOST = '172.29.121.238'
USER = 'root'
PASSWORD = 'test'

client = pm.SSHClient()
client.load_system_host_keys()
client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
client.set_missing_host_key_policy(AllowAllKeys())
client.connect(HOST,username=USER,password=PASSWORD)

stdin,stdout,stderr = client.exec_command('sshfs username@server:/source_path /destination_path')

如果我手动执行此操作,系统会要求我输入用户名密码。

然而,在这里我从stdout得到的一切:

>>> stdout.read()
b''

来自stderr我正在通过对等方重置连接

>>> stderr.read()
b'read: Connection reset by peer\n'

但在此之后,如果我做“pwd”,它会起作用。如果我做“cd /”,它将无效。

有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:0)

您必须使用invoke_shell打开交互式shell。一旦命令完成执行,通过使用exec_command,通道将被关闭,不能重复使用

答案 1 :(得分:0)

我明白了。我们必须通过invoke_shell()创建一个通道,然后使用send和recv()

channel = client.invoke_shell()
channel.send()
channel.recv(9999)