
Я хочу использовать .ssh/config
для подключения к хосту через шлюз. Я не хочу настраивать ключ RSA и использовать пароль. Я раньше делал такой переход без пароля. Теперь пытаюсь сделать это с паролем.
Прямая команда, которая работает для меня, это:
sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip
Где я уже настроил key auth в gateway и его данные присутствуют в моем .ssh/config. Чтобы настроить это в .ssh/config
, я попробовал следующее:
Host h_act
<username, hostname, port etc.>
ProxyCommand ssh gateway -W %h:%p
Host h
ProxyCommand sshpass -p mypassword ssh h_act
Однако, когда я пробую ssh h
, я получаю Pseudo-terminal will not be allocated as stdin is not a terminal
. Я пытался -vtt
с ssh получить странные сообщения, но без терминала. Я знаю, что цепочка ProxyCommand работает, когда есть netcat/nc
или просто ssh -W
с ним. Но здесь это не работает. Даже когда я пробую последнюю команду без sshpass, я получаю ту же ошибку. Я предполагаю, что это связано с определенными ожиданиями, которые ProxyCommand имеет от следующей команды, и я не могу их выполнить.
Есть идеи?
решение1
Я не думаю, что ваша конфигурация такая же, как в этом однострочном варианте, она больше похожа на это:
ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip
т.е. у вас есть sshpass
работающий внутри ProxyCommand.
Но я не думаю, что это сработает, sshpass
оборачивает ssh
клиента в псевдотерминал, скрывая тот факт, что пароль на самом деле приходит из файла или чего-то иного, чем пользовательский ввод с терминала. Для этого он должен запускаться до ssh
запуска клиента.
Если ваш первый однострочный код работает, но вам просто не хочется вводить его sshpass
каждый раз, вы можете обернуть его в скрипт оболочки:
#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"
Затем запустите что-то вроде sshscript myusername@myip
.
Кстати, не используйте sshpass -p
, это сделает пароль видимым в ps
выводе, пока ssh
клиент (и sshpass
) работает. Лучше использовать sshpass -e
для передачи пароля через среду или sshpass -f file
для чтения его из файла.