@nobodysu

Как записать вывод ошибок ssh команды в переменную и выполнить её одновременно?

cmd="ssh -f -N -M -S $sock_file -p $remote_port -D $local_port -i $key_file $user@$host"
cmd_out=$($cmd 2>&1)

Эта схема работает когда ошибки есть, но виснет при отсутствии ошибок на следующем:
debug3: receive packet: type 4
debug1: Remote: /home/user/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding

Что происходит?

Нужно соединяться если всё нормально и обрабатывать ошибку если нет. Вообще удивительно что у такой распространённой команды как ssh нет разный return-кодов.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Germanjon
А если попробовать классику
ssh HOST || echo ERROR
Линукса под рукой нет, чтобы проверить
Ответ написан
Radjah
@Radjah
Есть переменная $?, в которую заносится exit-code последней выполненной команды. Пляши от этого.
$ ssh 123
ssh: connect to host 0.0.0.123 port 22: Invalid argument
$ echo $?
255
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну здрасьте-приехали, как это нету return-кодов? Прекрасно возвращается errorlevel в стандартной переменной $?. О чём вы говорите?

И во-вторых, после всех параметров соединения нужна команда, которую нужно удалённо выполнить.
Без команды будет просто консоль, которая будет ждать ввода команды.
Вы думаете, что коннект висит, но он ждёт, то есть консоль ждёт комманды...
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
build engineer
cmd_out=$($cmd 2>&1)

Это лишняя конструкция с перенаправлением, у вас и так stdout и stderr смотрят в одно место, нет смысла перенаправлять еще раз

cmd="ssh -f -N -M -S $sock_file -p $remote_port -D $local_port -i $key_file $user@$host"
cmd_out=$($cmd 2>&1)

В чем разница этого вашего присваивания с выполнением и просто выполнением? Ведь нет никакой разницы.
ssh -f -N -M -S $sock_file -p $remote_port -D $local_port -i $key_file $user@$host


Эта схема работает когда ошибки есть, но виснет при отсутствии ошибок на следующем:


Что значит виснет? Какой результат ожидается? в интерактивный шелл вы не хотите (-N). Если подключение не происходит, то вам надо смотреть логи sshd на удаленном сервере. Возможно его конфигурация не позволяет подобное подключение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы