2013-11-01 11 views
1

Есть ли способ, чтобы выполнить команду перед получением доступа к удаленному терминалуВыполнение команды SSH и держать связь

Когда я ввожу команду:

bash $> ssh [email protected] 'ls'

Команда Ls выполняется на удаленном компьютере но ssh завершает работу, и я не могу продолжить работу на удаленном сеансе.

Есть ли способ удержать соединение? Причина, по которой я прошу об этом, заключается в том, что я хочу создать настройку для сеанса ssh без необходимости изменять удаленный файл .bashrc.

ответ

1

Вы можете попробовать использовать процесс подстановки на файл инициализации Баш. В приведенном ниже примере я определить функцию myfunc:

myfunc() { 
    echo "Running myfunc" 
} 

который я преобразовать к правильно-сбежавшему однострочнику отражаемого в <(...) конструкции для процесса подстановки для --init-file аргумента Баша:

$ ssh -t localhost 'bash --init-file <(echo "myfunc() { echo \"Running myfunc\" ; }") ' 
Password: 
bash-3.2$ myfunc 
Running myfunc 
bash-3.2$ exit 

Обратите внимание, что после подключения мой .bashrc не является источником, но myfunc определен и может использоваться в интерактивном сеансе.

Это может оказаться немного сложнее для более сложных функций bash, но это работает.

+0

Мне нужно иметь доступ к моему .bashrc, поэтому я изменил его на: 'ssh -t localhost 'bash --init-file <(echo" source ~/.bashrc; myfunc() {echo \ "Запуск myfunc \" ;} ") '' – Martinos

+0

Есть ли у вас идея, можно ли добавить эту команду в конфигурационный файл ssh? На самом деле, я хотел бы запускать эту команду каждый раз, когда я вхожу на сервер через ssh. – Martinos

+0

Возможно, вы можете сделать это с помощью 'ProxyCommand' в конфигурации ssh. – damienfrancois

2

Я вынудит выделение в псевдотерминал, а затем запустить Баш после команды ls:

[email protected]$ ssh -t host2.example.com 'ls -l /dev/null; bash' 
-rwxrwxrwx 1 root  other   27 Apr 1 2005 /dev/null 
bash-4.1$ 
+0

Фактически, в моем случае я не могу этого сделать, поскольку моя команда предназначена для установки. Если я запустил bash, я потеряю все настройки, которые я сделал. – Martinos

+0

Вместо общей команды вы можете рассказать нам, что конкретно вы пытаетесь запустить? –

+0

Я хочу создать функцию bash, которая будет запускать netcat на обратном туннельном порту. – Martinos

Смежные вопросы