Скажем, я подключился к удаленному компьютеру через SSH. Из программы на этом удаленном компьютере мне нужно выполнить команду на локальном компьютере (инициатор подключения).
В связи с этим возникает вопрос: можно ли подключиться к существующему соединению между двумя компьютерами, чтобы выполнить команду на локальном компьютере?
Я рассмотрел запуск команды ssh user@host-of-connecting-party <command>
на удаленном компьютере, чтобы установить обратное соединение. Но это сложнее автоматизировать и потребует вмешательства пользователя. Я надеялся, что смогу полностью автоматизировать его или хотя бы определить имя пользователя / хоста подключенного пользователя.
ssh
remote-access
Aeyoun
источник
источник
Ответы:
Иногда у меня возникает аналогичная потребность, пока я подключаюсь через Putty к нашему VPN-серверу, а оттуда через ssh к другому хосту, который недоступен для меня напрямую из-за настройки VPN.
Иногда мне просто нужно быстро что-то проверить на компьютере с VPN-сервером, пока у меня все еще работает ssh-сессия. Один из подходов - запустить сессию ssh
screen
, что, как я заметил, добавляет некоторую задержку по сравнению с «обычным ssh». Другой подход, которым я хотел бы поделиться здесь, заключается в следующем:Во время сеанса SSH нажмите Enter, затем ~(убедитесь, что он не отображается, т. Е. Вы находитесь в командном режиме), затем Ctrl- Z. Это поместит клиентский процесс ssh на «хост» в фоновом режиме, и вы получите что-то вроде:
Теперь вы находитесь на «хосте», можете делать все, что захотите (хотя я не уверен, как долго будет продолжаться сессия ssh), а затем вернуться к сеансу SSH, запустив его
fg
.По крайней мере, это работает для меня, пока я подключаюсь с рабочей станции Win10 через Putty к виртуальной машине на базе CentOS, и с этой виртуальной машины подключаюсь через SSH к другому хосту.
Надеюсь, это поможет кому-то!
источник
PermitLocalCommand yes
в вашем.ssh/config
для хоста, вы также можете сделать<Enter>~C
, то!<command>
.Ответ @ 62mkv - гораздо лучшее решение. Используйте это.
Для полноты и любопытства, если на локальном компьютере запущен ssh-сервер, вы можете создать ssh-туннель, чтобы разрешить ssh-соединения с удаленного хоста через порт 20202 обратно на локальный через порт 22. Пример команды:
Это запустит соединение SSH, но также настроит туннель обратно к серверу SSH, работающему на вашем компьютере. Затем вы можете сделать это, когда ssh'ed на удаленный хост:
Конечно, это может быстро запутать, особенно если техника вложена более одного раза. Это также добавляет немного задержки - все, что вы выполняете на локальном компьютере, пересылается через удаленный хост.
Дополнительную информацию о ssh-туннелировании для тех, чье любопытство еще не удовлетворено, можно найти в ответе на этот вопрос обмена стеками Unix .
источник
Если ваш локальный и удаленный компьютер доступны из Интернета, вы можете просто открыть сеанс SSH с локального компьютера на удаленном компьютере, а затем в этом сеансе открыть другой сеанс SSH с удаленного компьютера на локальном компьютере:
Для автоматизации вещей взгляните на Fabric (требуется знание Python)
источник
Вы можете использовать sshpass для подключения к удаленному компьютеру и запуска команд.
Используйте простой сценарий оболочки на локальном компьютере и используйте приведенный выше код всякий раз, когда вы хотите запускать команды на удаленном компьютере. Это один из способов, которые я обычно использую в автоматизации.
источник
Нет, вы не можете проникнуть в существующую сессию.
Вашему приложению потребуется способ подключения к клиенту. SSH будет работать, если на клиенте запущен SSH-сервер и сервер может подключиться к порту 22 на клиенте. Нетрудно автоматизировать, если вы используете аутентификацию на основе ключей вместо аутентификации по паролю - таким образом, вмешательство пользователя не будет необходимым.
Информацию о настройке аутентификации на основе ключей можно найти здесь: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/
источник
Если у вас есть доступ к другому терминалу, вы можете отправить SIGSTOP с помощью команды kill -19 PID команде ssh, которая инициировала соединение. После этого вы получите контроль над терминалом на клиентском компьютере. Когда вы закончите, вы можете восстановить ssh-соединение, просто набрав fg, чтобы разбудить ssh-клиента.
Но, конечно, здесь возникает вопрос: если у вас уже есть терминал на клиентской машине, зачем вы это делаете :)
источник