비밀번호를 입력하지 않고 원격 서버에 로그인하고 원격 SSH 명령을 실행하는 스크립트를 어떻게 실행할 수 있습니까?
예를 들어:
원격 서버에 로그인하고 git pull
명령을 실행하면 ssh
비밀번호를 묻는 메시지가 표시됩니다.
$ git pull origin master
Enter passphrase for /home/v3ed2/.ssh/id_rsa:
비밀번호를 입력한 후 명령을 계속 실행하겠습니다.
원격 서버에 로그인하여 명령을 실행하는 스크립트를 실행하고 싶습니다. 나는 다음 스크립트를 시도했습니다.
ssh ve "cd clients/ ; git pull"
그러나 스크립트가 실행될 때 비밀번호를 묻는 메시지가 표시되지 않습니다. 암호를 기다리는 동안 스크립트가 중단되지만 암호를 입력하려고 하면 오류가 발생합니다.
bash: line 1: [REDACTED]: command not found
답변1
명령 없이 ssh를 실행하면 서버 측에 의사 터미널이 설정되고 해당 터미널에서 대화형 쉘이 실행됩니다. 명령을 전달하면 원격 터미널 없이 명령의 입력과 출력이 SSH 채널에 직접 연결되어 실행됩니다. 이 옵션을 통과하면 -t
원격측에 터미널이 생성되고 비밀번호를 입력할 수 있는 비밀번호 프롬프트가 표시됩니다.
ssh -t ve "cd clients/ ; git pull"
그러나 이는 편리한 방법이 아닙니다. 편리한 방법은 로컬 컴퓨터에서 SSH 에이전트를 실행하고 해당 에이전트에 연결을 전달하는 것입니다.
먼저 두 번째 연결(git 서버에 대한)에서는 비밀번호 인증이 아닌 공개 키 인증을 사용해야 합니다. 이미 이 작업을 수행했으므로 자세히 설명하지 않겠습니다.
두 번째 서버(중간 컴퓨터)의 개인 키를 /home/v3ed2/.ssh/id_rsa
로컬 컴퓨터에 복사합니다. 또는 git 서버에서 로컬 머신에 있는 개인 키의 공개 키를 보유하도록 권한을 부여합니다. 또는 먼저 실행하여 ssh -t ve ssh-add .ssh/id_rsa
중간 컴퓨터의 키를 로컬 에이전트에 등록하세요.
일부 배포판 및 데스크탑 환경에는 이미 SSH 에이전트가 설정되어 있습니다. 실행 중인 에이전트가 있는지 확인하십시오 ssh-add -l
. 실행 중인 에이전트가 없음을 나타내는 경우 세션에서 에이전트를 시작해야 합니다. 직접 호출하는 ssh-agent your-session-manager
대신 실행하거나 세션 시작 스크립트에서 실행하거나 GUI 구성에서 "SSH 에이전트 실행" 확인란을 선택하세요. 두 가지 작업을 수행해야 합니다. 프로그램을 시작하고 프로그램 이 설정하거나 세션 환경에 인쇄하는 변수를 가져옵니다. 이를 수행하는 방법에 대한 세부 사항은 배포 및 데스크탑 환경에 따라 다릅니다.your-session-manager
eval $(ssh-agent)
ssh-agent
SSH_AUTH_SOCK
SSH 에이전트를 로컬로 실행한 후 이를 전달해야 합니다. 이는 기본적으로 전달될 수도 있고 전달되지 않을 수도 있습니다. ssh ev ssh-add -l
프록시가 전달 중인지 확인하려면 실행하세요 . 그렇지 않은 경우 이 줄을 ForwardAgent yes
로컬 ~/.ssh/config
.
PuTTY를 사용하여 Windows를 로컬로 실행하는 경우 핵심 에이전트인 Pageant도 함께 제공됩니다. 보다퍼티 매뉴얼지침을 위해.
ssh-add ~/.ssh/id_rsa
유효한 SSH 에이전트가 설정되어 있으면 명령(또는 개인 키에 대한 경로)을 사용하여 세션당 한 번씩 에이전트에 키를 등록하십시오. 그 후에는 나머지 세션 동안 메시지를 표시하지 않고 키를 사용할 수 있습니다.
답변2
이 질문은 너무 광범위해서 해결 방법이 다양합니다.
첫 번째는 비밀번호 없이 키를 사용하는 것입니다. 기술적으로 암호는 로컬 개인 키를 암호화하는 일부 대칭 암호화 알고리즘의 키입니다. 빈 암호는 키가 암호화되지 않았으며 키를 읽을 수 있는 권한이 있는 모든 사람이 사용할 수 있음을 의미합니다. ssh-keygen에 빈 비밀번호를 사용하도록 지시할 수 있습니다.-N''생성할 때 사용하거나 나중에 변경하는 데 사용-피(여기의 모든 옵션은 OpenSSH 버전에 적용됩니다). 이는 원격 시스템에 대한 서명된 자동 액세스를 제공하는 가장 널리 사용되는 방법입니다. 종종 키에 대한 서버 측 제한(IP 제한, 강제 명령, 제한된 셸 등을 통해)과 결합됩니다.
원하는 경우 암호화된 디스크에서 암호화되지 않은 개인 키를 보호할 수 있습니다.
다음으로 ssh-agent를 사용할 수 있습니다. 사용자가 시스템에 로그인해야 하며 런타임 시 비밀번호를 메모리에 캐시하므로 X 터미널 세션(또는 시뮬레이션) 중에 한 번만 비밀번호를 입력하면 비밀번호를 반복할 필요 없이 자동으로 원격 서버에 로그인할 수 있습니다. .
다음으로, 클라이언트와 서버 호스트가 동일한 영역에 속하는 경우 자체 세션 시간 티켓으로 원격 로그인을 제공하는 Kerberos를 사용할 수 있습니다.
다음으로 사용할 수 있습니다예상되는또는 유사한 도구를 사용하여 명령을 실행하는 터미널과 자동으로 상호 작용할 수 있습니다. 해당 스크립트는 비밀번호 프롬프트를 수신하고 입력해야 합니다. 그러나 이는 여기에 설명된 다른 모든 방법보다 훨씬 더 복잡하고 번거롭기 때문에 다른 방법이 실패할 경우 최후의 수단으로 고려해야 합니다.
목록은 좀 더 이국적인 방법으로 진행될 수 있습니다 :)
답변3
당신이 찾고있는 것은 SSH 키를 사용하는 것이라고 생각합니다. 키 세트(개인 키 하나와 공개 키 하나)를 생성하고 원격 시스템의 계정에 공개 키를 추가해야 합니다. 키를 찾으면 비밀번호를 입력하지 않고도 원격으로 다른 시스템에 로그인할 수 있습니다.
자세한 내용은 다음 방법을 확인하세요.