ssh
다른 서버에 연결하고 거기에서 일부 명령을 실행하는 bash 스크립트가 있습니다 . 일부 웹사이트의 error() Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
는 친근한 메시지이지만 내 bash 스크립트는 "멈췄습니다". 이 메시지가 나타난 후에는 다른 명령이 실행되지 않습니다. 다른 포럼에서는 ssh -t
메시지를 억제하는 데 효과가 있는 것으로 추정되지만 나에게는 효과가 없었습니다. 내 코드는 다음과 같습니다
.
.
.
stty -echo
sshpass "pwd" ssh -o StrictHostKeyChecking=no [email protected] 'su -lc "rm -rf tmp"' 2>/dev/null
stty echo
.
.
.
내가 사용하는 이유 stty-echo
는 사용자를 루트로 전환하고 비밀번호가 터미널에 표시되도록 해야 하기 때문입니다(나는 그것을 원하지 않습니다). Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
연결 서버(ip:1.1.1.1)에 루트 비밀번호를 입력했는데, 오류 메시지( )가 나타났습니다.
어떤 제안이 있으십니까? 추가 설명이 필요하면 알려주시기 바랍니다. 감사해요! (내 bash 버전은 GNU bash 버전 3.2.51(1)입니다.)
편집하다
삭제 시 나타나는 오류 메시지 2>/dev/null
는 다음과 같습니다.
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
stty: standard input: Invalid argument
답변1
사용하기 전에 stdin
터미널인지 확인할 수 있습니다 stty
.
if [[ -t 0 ]]; then stty -echo; fi
답변2
터미널에서 비밀번호와 루트 비밀번호를 안전하게 숨기려고 하는 대신 SSH 키 쌍을 사용하는 것은 어떨까요? 해당 명령을 실행하면 ssh-keygen
crypto.pub 키를 생성할 수 있고, 이를 각 원격 호스트의 파일에 넣으면 /root/.ssh/authorized_keys
다음과 같은 명령을 실행할 수 있습니다. 이렇게 하면 비밀번호를 눈에 띄게 다시 입력할 필요가 없습니다. 원하는 경우 이 명령을 crontab에 추가하고 정기적으로 설정하여 다른 작업에 시간을 보낼 수도 있습니다. 이는 모두 키를 생성한 컴퓨터가 sudo 사용자와 sudo가 아닌 사용자 간의 공유 계정이 아니라고 가정합니다.ssh [email protected] "rm -rf tmp"
이것이 도움이 되었지만 더 나은 설명이 필요한 경우 알려주시면 답변에 더 많은 정보를 추가하도록 노력하겠습니다.
이전에 키 쌍을 생성한 적이 없다면 다음이 도움이 될 수 있습니다.http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/