Eu tenho um script invocado na ssh
invocação (no Linux) para executar alguns comandos e depois fazer login como um usuário diferente su -l <anotheruser>
- tudo isso funciona bem quando eu uso qualquer cliente scp
/ baseado em Linux ssh
. Mas quando tento com WinScp (com File Protocol SCP
nas opções) não funciona! Continuando a solução de problemas, parece que o shell invocado su -l <anotheruser>
está de alguma forma sendo eliminado! Então, vejo o seguinte no log do WinScp:
(EFatal) **Connection has been unexpectedly closed.** Server sent command exit status 1
Mas não consigo descobrir por que o su
shell de login é eliminado apenas ao usar o WinScp! Alguma indicação para depurar ainda mais?
--EDITAR--
Últimas linhas do log do WinSCP:
! 2024-07-27 00.23.13.824 su: must be run from a terminal
. 2024-07-27 00.23.13.824 Session sent command exit status 1
. 2024-07-27 00.23.13.824 Main session channel closed
. 2024-07-27 00.23.13.824 All channels closed
. 2024-07-27 00.23.13.824 Timeout waiting for network events
. 2024-07-27 00.23.13.824 Waiting for another 1 bytes
. 2024-07-27 00.23.13.824 Looking for incoming data
. 2024-07-27 00.23.13.824 Looking for network events
. 2024-07-27 00.23.13.824 Attempt to close connection due to fatal exception:
* 2024-07-27 00.23.13.824 **Connection has been unexpectedly closed.** Server sent command exit status 1.
. 2024-07-27 00.23.13.824 Closing connection.
. 2024-07-27 00.23.13.824 Selecting events 0 for socket 1932
* 2024-07-27 00.23.13.856 (EFatal) **Connection has been unexpectedly closed.** Server sent command exit status 1.
* 2024-07-27 00.23.13.856 Error skipping startup message. Your shell is probably incompatible with the application (BASH is recommended).
A linha
! 2024-07-27 00.23.13.824 su: must be run from a terminal
Indique um problema!?
Meu script é invocado através de um plugin NSS ( libnss-ato
)
--EDITAR 2--
Depois de usar uma su
versão do util-linux que tem uma --pty
opção, o Winscp parece travar! registros:
< 2024-08-02 15.00.55.772 tani1@sys7-vm81B$ echo "WinSCP: this is end-of-file:0"
. 2024-08-02 15.00.55.772 Read 31 bytes (18 pending)
< 2024-08-02 15.00.55.772 WinSCP: this is end-of-file:0
. 2024-08-02 15.00.55.772 Read 18 bytes (0 pending)
. 2024-08-02 15.00.55.772 Waiting for another 1 bytes
. 2024-08-02 15.00.55.772 Looking for incoming data
. 2024-08-02 15.00.55.772 Looking for network events
. 2024-08-02 15.01.12.135 Timeout waiting for network events
. 2024-08-02 15.01.12.135 Waiting for data timed out, asking user what to do.
. 2024-08-02 15.01.12.135 Asking user:
. 2024-08-02 15.01.12.135 **Host is not communicating for 15 seconds.
. 2024-08-02 15.01.12.135
. 2024-08-02 15.01.12.135 Wait for another 15 seconds?** ()
su requer que um terminal funcione corretamente e, quando usado com WinSCP, não obtém o ambiente de terminal necessário, o que leva a erros.
Em vez disso, use sudo em vez de su , se possível, considere usar sudo com a opção -i para trocar de usuário. sudo não requer um terminal da mesma forma que su. Modifique seu script para usar sudo em vez de su. Por exemplo:
Você também pode usar o comando de script para criar um pseudoterminal. Isso permite que su seja executado em um ambiente onde ele pensa ter um terminal. Assim:
No WinSCP, você pode tentar ajustar as configurações para garantir a compatibilidade com os requisitos do terminal. Vá para as configurações avançadas no WinSCP e ajuste as configurações do Shell. Defina o shell como bash ou outro shell compatível.
Se o procedimento acima falhar, depure-o usando strace para descobrir o que está bloqueando.