Мультихоп с sshpass

Мультихоп с sshpass

Я хочу использовать .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для чтения его из файла.

Связанный контент