Как избежать проблемы
Во-первых, не делайте этого.Вместо этого используйте встроенную поддержку ProxyJump
в ssh:
ssh -o 'ProxyJump user1@server1' user2@server2
Вы можете даже сделать это автоматическим для всех подключений к server2
, добавив в файл ~/.ssh/config
что-то вроде следующего:
Host server2
ProxyJump user1@server1
Объяснение проблемы
Существует несколько вариантов поведения:
- Когда команда
ssh
передает команду, она не создаетTTY по умолчанию (если не указано -t
или -tt
).Это влияет на способность любой вызываемой программы манипулировать настройками терминала;isatty(0)
это также обычный способ сделать "я-я-интерактив?"проверять.Если stdin оболочки не присоединен к TTY, это один из способов определить, что он не интерактивный. - Когда оболочка запускается с
"$SHELL" -c "command"
- как ssh
при ее передачекоманда для запуска - она не запускается в интерактивном режиме и поэтому не вызывает rc
файлов (которые явно предназначены для интерактивного использования).