ssh -T user@server < script.sh
# "Pseudo-terminal will not be allocated because stdin is not a terminal."
Вы путаете сервер sshd
, так как он предполагает, что интерактивный сеанс входа в систему с использованием stdin является терминалом - sshd
выделит псевдо-tty для такого сеанса - если no указывается в качестве аргумента вашей ssh
(клиентской) команды, но вместо этого sshd
видит, что stdin его оболочки по умолчанию перенаправляется из файла, указанного оператором перенаправления ввода <strong><</strong>
.
Это довольно неожиданное поведение с точки зрения sshd
, когда клиент ssh
не предоставляет команду для выполнения на удаленном хосте, но перенаправляет стандартную оболочку sshd
по умолчаниюиз файла или здесь документа / строки или трубы.
ssh localhost <<<'echo Hello, world!'
ssh localhost sh <<<'echo Hello, world!'
ssh -T localhost <<<'echo Hello, world!'