Текущий набор, с которым я работаю, требует меня к ssh на машину C первым ssh-лугом в A и затем в B. Что-то вроде этого:
ssh [username]@[university].com # Machine A
ssh [department] # Machine B
ssh [machinename] # Machine C
Меня просят относительно пароля когда ssh-луг в A.
Моя цель состоит в том, чтобы использовать sshfs для монтирования удаленного каталога на C локально для редактирования файлов в удаленном каталоге с помощью файлового менеджера и текстовых редакторов локально на моей машине. Я попытался следовать нескольким учебным руководствам/сообщениям в блоге, но, может казаться, не получаю эту работу.
Я пытался добавить записи в мой ~/.ssh/config
файл для автоматизации всего процесса ssh-луга сначала, но напрасно. Кто-то может объяснить, как я могу сделать это или предоставить ссылки, которые могут помочь?
Как вопрос о стороне: действительно ли намеченный подход является самым легким для моих целей (т.е. способность редактировать/создавать сценарии на удаленном диске с помощью локальных текстовых редакторов)?
Я нахожусь на Ubuntu 18.04 и довольно плохо знаком с Linux.Спасибо за помощь!
Я предполагаю, что Вы работаете над машиной A. Оттуда можно соединиться с машиной B. И от B можно соединиться с машиной C. То, что Вы хотите, должно установить соединение непосредственно от машины к машине C. Вот мое предложение:
Создайте соединение SSH из машины B к машине C и передайте локальный порт на B (20022
- например) к удаленному порту SSH на C (22
).
machine-b~$ ssh machine-c -L 20022:127.0.0.1:22 -fTN
Или дайте команду через SSH непосредственно от машины A:
machine-a~$ ssh machine-b "ssh machine-c -L 20022:127.0.0.1:22 -fTN"
Создайте соединение SSH из машины к машине B и передайте локальный порт на (10022
) к удаленному порту 20022
на B.
machine-a~$ ssh machine-b -L 10022:127.0.0.1:20022 -fTN
Создайте соединение SSH или используйте SSHFS от до его обратной петли iface (127.0.0.0
/localhost
) на порте 10022
соединяться с C.
machine-a~$ ssh -p 10022 <machine-c-user>@localhost
machine-a~$ sshfs -p 10022 <machine-c-user>@localhost:/target/dir/ /dest/dir/
Согласно этому сценарию ниже представлены немногие немного больше передовых идей и объяснений.
1. Машина установки B для соединения с машиной C при помощи ssh пары ключей (без пароля), если это ранее не сделано. С этой целью используйте следующую последовательность:
SSH к машине B и генерирующий пару ключей RSA, не вводите пароль:
mkdir -p ~/.ssh/machine-c-key/
chmod 700 ~/.ssh
chmod 700 ~/.ssh/machine-c-key/
ssh-keygen -t rsa -b 4096 -f ~/.ssh/machine-c-key/id_rsa # do not enter passphrase
chmod 600 ~/.ssh/machine-c-key/id_rsa
Передайте id_rsa.pub
ключ в ~/.ssh/authorized_keys
файл на машине C, при помощи ssh-cipy-id
. На машине B выполняют команду:
ssh-copy-id -i ~/.ssh/machine-c-key/id_rsa '<user>@<machine-c>' -p '22'
Теперь попытайтесь войти в машину C, с:
ssh -i ~/.ssh/machine-c-key/id_rsa -p '22' '<user>@<machine-c>'
Если это работает, при необходимости редактирование /etc/ssh/sshd_config
и набор: PasswordAuthentication no
Скопируйте сгенерированный ключ с машины B к машине A, мы будем использовать его позже. На машине использование rsync
следующим образом (обращают внимание на наклонные черты /
):
rsync -r machine-b:/home/<user>/.ssh/machine-c-key ~/.ssh/
Соглашение с полномочиями (на машине A):
chown -R $(id -u):$(id -g) ~/.ssh
chmod 700 ~/.ssh/machine-c-key/
chmod 600 ~/.ssh/machine-c-key/id_rsa
2. Создать ~/.ssh/config
файл на машине B и перенаправление портов установки. Добавьте эти строки в упомянутый файл конфигурации:
Host machine-c-port-fwd
HostName 192.168.100.100
IdentityFile ~/.ssh/machine-c-key/id_rsa
User user
Port 22
LocalForward 20022 127.0.0.1:22
Port 22
ssh порт на машине C.RemoteForward 20022 127.0.0.1:22
средства, что порт 22
из удаленного петлевого интерфейса (на машине C) будет передан порту 20022
на машине B.Host machine-c
это - хорошая идея создать отдельную для установки перенаправления портов.Теперь необходимо смочь соединиться с машиной C от машины B при помощи команды:
ssh machine-c-port-fwd
Мы можем отодвинуть это соединение на задний план путем добавления опций -fTN
(ссылка). Мы могли использовать также инструмент autossh
чтобы быть уверенным, соединение будет поддержано в течение длительного промежутка времени (sudo apt install autossh
- ссылка):
autossh machine-c-port-fwd -fTN
killall autossh
отключить его :)На данном этапе необходимо смочь соединиться с машиной C от машины B через ее петлевой интерфейс:
ssh -i ~/.ssh/machine-c-key/id_rsa -p '20022' '<machine-c-user>@localhost'
3. Установите соединение от машины к машине C (через машину B). Выполните следующие шаги на машине A:
Дайте команду через SSH к машине B для установления соединения с машиной C:
ssh machine-b "autossh machine-c-port-fwd -fTN"
Эй может добавить следующее задание в Crontab пользователя (crontab -e
) на машине B для установления перенаправления портов на системной перезагрузке:
@reboot sleep 15 && autossh machine-c-port-fwd -fTN
Установите соединение SSH к машине B (от A) с перенаправлением портов и отодвиньте соединение на задний план:
autossh machine-b -L 10022:127.0.0.1:20022 -fTN
Таким образом локальный порт 10022
(на машине A), будет передан (связывают) с удаленным портом 20022
(на машине B), который является, связывают с портом 22
на машине C. Мы можем использовать тот же номер порта (20022
- например) на A и B...
Обратите внимание, что везде мы - предел перенаправление портов только к петлевому интерфейсу (127.0.0.1
), но это могло быть сделано для всех интерфейсов (0.0.0.0
или \*
) или для определенного интерфейса (при помощи его IP).
Можно создать ~/.ssh/config
файл на машине A, аналогичный описанию в разделе 2, для упрощения команд в будущем. Alco я предпочел бы использовать основанную на ключе аутентификацию SSH...
Соединитесь с машиной C от машины через (на машине A) петлевой интерфейс:
ssh -i ~/.ssh/machine-c-key/id_rsa -p '10022' '<machine-c-user>@localhost'
Или используйте SSHFS таким образом (примечание, sshfs
может использовать хосты от ~/.ssh/config
):
sshfs -p 10022 <machine-c-user>@localhost:/target/dir/ /destination/dir/ -o IdentityFile=~/.ssh/machine-c-key/id_rsa
Для автоматизации выполнения вышеупомянутых трех команд, можно создать функцию как следование в Вашем ~/.bashrc
файл:
mount-machine-c() {
ssh machine-b "autossh machine-c-port-fwd -fTN" && sleep 1
autossh machine-b -L 10022:127.0.0.1:20022 -fTN
sshfs -p 10022 <machine-c-user>@localhost:/target/dir/ /destination/dir/ -o IdentityFile=~/.ssh/machine-c-key/id_rsa
}
source ~/.bashrc
и mount-machine-c
будет доступно как команда оболочки. Можно добавить дополнительную логику и аргументы тесту ли /destination/dir/
уже смонтирован, и т.д...