development

bash 스크립트 내에서 ssh하는 방법은 무엇입니까?

big-blog 2020. 12. 12. 12:07
반응형

bash 스크립트 내에서 ssh하는 방법은 무엇입니까?


ssh 연결을 만들고 스크립트 내에서 원격 서버에서 몇 가지 작업을 수행하려고합니다.

그러나 터미널은 나에게 암호를 묻는 메시지를 표시 한 다음 스크립트 대신 터미널 창에서 연결을 엽니 다. 연결을 종료 할 때까지 명령이 실행되지 않습니다.

bash 스크립트 내에서 어떻게 SSH를 사용할 수 있습니까?


  1. 비밀번호 프롬프트가 사라지도록하려면 키 기반 인증을 사용 하십시오 ( 여기에 설명 됨 ).

  2. ssh를 통해 원격으로 명령을 실행하려면 다음과 같이 명령을 ssh에 대한 인수로 제공해야합니다.

root @ host : ~ # ssh root @ www 'ps -ef | grep 아파치 | grep -v grep | 화장실 -l '


암호를 계속 사용하고 키 교환을 사용하지 않으려면 다음과 같이 'expect'를 사용하여이를 수행 할 수 있습니다.

#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN

공유 연결을 사용하여이를 수행하는 또 다른 방법이 있습니다. 즉, 누군가가 암호를 사용하여 연결을 시작하면 모든 후속 연결이 동일한 채널을 통해 멀티플렉싱되므로 재 인증이 필요하지 않습니다. (그리고 그것도 빠릅니다)

# ~/.ssh/config 
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h

그런 다음 로그인 만하면되며, 로그인되어있는 동안 bash 스크립트는 ssh 연결을 열 수 있습니다.

그런 다음 누군가가 아직 채널을 열지 않은 경우 다음과 같이 스크립트가 작동하지 않도록 할 수 있습니다.

ssh ... -o KbdInteractiveAuthentication=no ....

해야 할 일은 스크립트가 실행되는 사용자의 SSH 키를 교환하는 것입니다. 이 튜토리얼을 보세요

이렇게하면 암호를 입력 할 필요없이 스크립트가 실행됩니다. 그러나 보안을 위해 루트 사용자를 위해이 작업을 수행하고 싶지 않습니다!

참고 URL : https://stackoverflow.com/questions/1895185/how-to-ssh-from-within-a-bash-script

반응형