Что Вы спрашивающий являетесь почти тем же как этим.
Если Вы не хотите копировать ключ от шлюза до локального поля, работой вокруг является Метод использования 1 (псевдоним удара) в том сообщении (и ниже). ssh_config не может сделать то, что Вы хотите. У меня есть объяснение детали там о различии между псевдонимом и туннельным методом, которые включают ssh_config ProxyCommand
.
В ~/.bashrc
, добавьте следующую строку
alias ssh-test='ssh -t gateway ssh test@test'
В командной строке просто введите следующее
ssh-test
Что ssh -t gateway ssh test@test
сделайте почти то же следующим образом
local# ssh gateway
gateway# ssh test@test
Кроме объединения этих двух ступают в один, оно пропускает открытие оболочки (csh, удар, и т.д.) на gateway
, вместо этого запуская ssh сессию к test
прямо после аутентификации.
Вы не нуждаетесь в ~/.ssh/config на локальном поле, НО сохраняете один шлюз для test
(для ключевого использования).
Добавление ForwardAgent yes
к gatway .ssh/config
Host test
HostName 192.168.1.10
ForwardAgent yes
IdentityFile ~/keys/test
User test
Если Вы не хотите копировать ключ шлюза к локальному полю, но разрешили устанавливать Ваш local
ключ ssh в test@test
. Затем можно использовать следующее
локальный ~/.ssh/config
Host gateway
User
HostName
Host test
User test
Hostname 192.168.1.10
Port 22
ProxyCommand ssh gateway nc %h %p
Недавно мне пришлось это сделать. На странице Stack Overflow я ответил, как найти PID процесса, запущенного на экране . После получения PID вы можете использовать ps
для получения команды. Вот содержимое этого ответа с некоторым дополнительным содержимым для решения вашей ситуации:
Вы можете получить PID сеансов экрана здесь так:
$ screen -ls
There are screens on:
1934.foo_Server (01/25/15 15:26:01) (Detached)
1876.foo_Webserver (01/25/15 15:25:37) (Detached)
1814.foo_Monitor (01/25/15 15:25:13) (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
Предположим, что вы хотите, чтобы PID программы, запущенной в Bash, находился в сеансе экрана foo_Monitor
. Используйте PID сессии экрана foo_Monitor
, чтобы получить PID сессии bash
, запущенной в ней, путем поиска PPIDs (Parent PID) для известного PID:
$ ps -el | grep 1814 | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1815 1814 0 80 0 - 5520 wait pts/1 00:00:00 bash
Теперь получите только PID сессии bash
:
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
Теперь мы хотим, чтобы процесс с PID этим PID был запущен в Bash. Просто вложите команды, и на этот раз используйте флаг -v
на grep bash
, чтобы получить процесс, который является а не bash:
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
Мы можем использовать этот PID, чтобы найти команду (Посмотрите на конец второй строки):
$ ps u -p 23869
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ? Sl Feb02 1147:09 /usr/lib/foo
Сложите всё вместе:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
Как насчет использования screen -S
, чтобы дать сеансам экрана понятные имена в соответствии с командами, которые они запускают? Имена будут перечислены с screen -ls
и будут использоваться для возобновления сеанса с помощью screen -r
.
Отредактируйте, чтобы добавить:
Поскольку это было доведено до моего сведения буквально на днях. tmux
предлагает тот же набор функций, что и screen
(если не больше), и поставляется с функцией, соответствующей вашим потребностям. Из FAQ: «tmux поддерживает автоматическое переименование окон в запущенное приложение без грубых взломов с использованием escape-последовательностей. По умолчанию даже включено»