Могу ли я подключиться к серверу по ssh, а затем выполнить sshfs на сервере с помощью paramiko?

Я пытаюсь подключиться к серверу по ssh, а затем смонтировать рабочее пространство с помощью sshfs на сервере с помощью paramiko.

Код у меня есть:

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 /", это не сработает.

Кто-нибудь может мне здесь помочь?

Спасибо


person luke wang    schedule 23.04.2015    source источник


Ответы (2)


вам нужно будет открыть интерактивную оболочку, используя invoke_shell. При использовании exec_command после завершения выполнения команды канал будет закрыт и не может быть использован повторно.

person Anesh    schedule 24.04.2015

Я понял. Нам нужно создать канал через invoke_shell (), а затем использовать send и recv ()

channel = client.invoke_shell()
channel.send()
channel.recv(9999)
person luke wang    schedule 24.04.2015