Как подключить удаленный SSHFS через промежуточный компьютер? Туннелирование?

26

Я хотел бы смонтировать удаленную файловую систему (A) с использованием SSHFS, но иногда у меня есть IP-адрес, доступ с которого не разрешен. Поэтому я планирую получить к нему доступ через другую машину (B) в этой сети. Нужно ли монтировать A на B, а затем монтировать B (и A) на моем локальном компьютере? Есть ли лучший способ сделать это?

Обновить

Просто чтобы уточнить процедуру:

Сначала я делаю туннель

ssh -f user@machineB -L MYPORT:machineA:22 -N

А потом я монтирую удаленную файловую систему

sshfs -p MYPORT user@127.0.0.1:/myremotepath /mylocalpath

Это правильно?

Как мне разрушить туннель, когда я закончу?

Андрей
источник
1
лучший способ настроить туннель - это подключиться к B из окна GNU с помощью ssh user @ machineB -L 2222: machineA: 22 -N, чтобы вы могли легко убить его с помощью ^ C
edk

Ответы:

9

да туннелирование Вы подключаете машину B, создаете локальный туннель (-L) к SSHd-порту машины A, затем sshfs к localhost к порту вновь созданного туннеля.

ЕДК
источник
Является ли следующая команда правильным способом сделать это? ssh -f user@machineB -L 25:machineA:25 -N
Андрей
1
да, если у вас есть sshd, прослушивающий порт 25 на компьютере A., тогда вам просто нужно будет sshfs -p 25 user@127.0.0.1: / path / localpath
edk
1
Ага, так что для настройки ssh по умолчанию мне нужно ssh -f user@machineB -L 22:machineA:22 -N, верно?
Андрей
16

Вы можете использовать опцию ssh_commandиз sshfsсделать трюк:

sshfs ma: /mnt -o ssh_command='ssh -t mb ssh'

Размонтировать с обычным

fusermount -u /mnt

Извините, это на 7 лет позже ...

Родриго Фариас
источник
5
С новой опцией -J в Openssh 1.1 это нечто вроде: sshfs ma: / mnt -o ssh_command = 'ssh -J mb'
Охад Рубин
0

Ваша схема подключения: Your machine --> Host B --> Host A

В нашем решении будет использоваться Proxy Jump, представленный в OpenSSH 7.3 , поэтому вам нужно проверить, что ваша версия новее:

ssh -V

Затем вам нужно правильно настроить ~ / .ssh / config. Например, если MachineB доступен с паролем входа в систему из machineâ :

machineB
    HostName {machineB ip address}
    User {machineB username}
    Port {machineB port-number}
    IdentityFile ~/.ssh/{machineB private ssh key}

machineA
    ProxyJump machineB
    Hostname {machineA ip address, maybe in local network}
    User {machineA username}
    Port {machineA port-number}

Наконец, создайте точку монтирования и добавьте строку в / etc / fstab

machineB:{machineB mount path}  {your local mountpoint}  fuse.sshfs delay_connect,_netdev,user,idmap=user,follow_symlinks,identityfile={local path to machineB private key},default_permissions,uid={local user uid},gid={local user gid} 0 0
lucidyan
источник
Это имеет какую-то выгоду по сравнению с использованием только -o ssh_command="ssh -J machineB"?
Клемиш