SSH 키 저장 또는 취소 옵션 메시지를 묻지 않고 SSH 명령

SSH 키 저장 또는 취소 옵션 메시지를 묻지 않고 SSH 명령

Linux 시스템에서 다른 Linux 시스템으로 연결하고 특정 명령의 출력을 얻으려면 ssh 명령이 필요하지만 SSH 키 저장, 취소에 대한 프롬프트 없이 연결을 강제로 설정해야 합니다.

지금까지 명령을 사용하여 연결하고 출력을 가져왔지만 공개 SSH 키를 저장하라는 메시지가 표시되었습니다.

value=$(ssh -q -P $passwd $userid@$box "head -1 /users/SB1.txt")

답변1

호스트 키 확인을 비활성화하고 다음 SSH 옵션이 필요합니다.

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

SSH 구성 파일 대신 명령에 추가하는 경우 다음을 사용하십시오.

-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

예제 명령 뒤에 -q.

답변2

준비(SSH 클라이언트 사용자 및 상자에서): 공개 키 인증을 위한 키 쌍 생성

ssh-keygen -N '' -t rsa -f ~/.ssh/id_rsa

$userid준비(수동/대화형, 사용자/서버당 한 번): 공개 키 인증을 설정하고 묻지 않고 호스트 키를 수락합니다( 비밀번호를 한 번 묻습니다 ).

ssh-copy-id -o "StrictHostKeyChecking = no" $userid@$box

그런 다음 상호 작용 없이 원격 명령을 실행합니다.

value=$(ssh -o 'BatchMode = yes' $userid@$box "head -1 /users/SB1.txt")

이제 SSH 클라이언트는 서버의 SSH 호스트 키를 실행할 때 추가되었기 때문에 이를 알고 있습니다 ssh-copy-id.

답변3

여기에는 두 부분이 있습니다. (질문에서 알 수 있듯이) 비밀번호 인증을 사용하려는 경우 비밀번호 프롬프트 없이 연결하려면 sshpass 프로그램을 사용해야 합니다. 대부분의 Linux 배포판에 있는 패키지 관리자를 통해 설치할 수 있습니다. 매뉴얼 페이지에서:

sshpass는 "키보드 대화형" 비밀번호 인증이라는 모드를 사용하지만 비대화형 모드에서 ssh를 실행하도록 설계된 유틸리티입니다.

물론 SSH 키를 설정하는 것이 더 좋지만 SSH 비밀번호를 사용하지 않으면 다른 보안 채널이 없으면 애초에 원격 시스템에 대한 공개 키를 가져오는 것이 불가능합니다. 키를 거기에 넣으려면 비밀번호를 사용해야 한다는 점을 고려하면, 일회성 사용인 경우 비밀번호를 사용하여 작업을 수행할 수도 있습니다.

두 번째 부분은 처음에 키를 저장하라는 메시지가 표시되지 않도록 StrictHostKeyChecking에 적절한 값을 설정해야 한다는 것입니다. 일반적으로 StrictHostKeyChecking=accept-new를 사용합니다. 그런 다음 ssh는 메시지를 표시하지 않고 사용자의 알려진 호스트 파일에 새 호스트 키를 자동으로 추가합니다.

따라서 일반적인 명령은 다음과 같습니다.

value=$(sshpass -p$passwd ssh -q -oStrictHostKeyChecking=accept-new $userid@$box "head -1 /users/SB1.txt")

답변4

넌 꼭 그래야 해아니요호스트 키를 조작하는 것은 나쁜 생각입니다.

당신이 해야 할 일은 ssh-keygen(1)("man ssh-keygen" 참조)을 활용하고 공개 키와 개인 키를 생성하는 것입니다. 비밀번호 프롬프트가 필요하지 않으므로 비밀번호를 제공할 필요가 없습니다. 홈 디렉터리(~/.ssh)의 .ssh 디렉터리에서 결과를 찾을 수 있습니다.

다음: ~/.ssh/id_rsa.pub의 내용을 원격 서버의 ~/.ssh/authorized_keys 파일에 추가합니다(직접 만들어야 할 수도 있음).

마지막으로 사용자가 원격 키를 사용하여 인증할 수 있음을 SSH(sshd)에 알립니다. 이것이 기본값일 수 있지만 모든 Linux 배포판에 대해 완전히 확신할 수는 없습니다. PubkeyAuthentication 옵션을 찾아 활성화되어 있는지 확인하세요.

따라서 여기서 발생하는 상황은 다음과 같습니다. 자신을 인증하기 위해 여전히 매우 강력한 인증(~/.ssh/id_rsa에 저장된 외부 키)을 사용하지만 인증을 제공하지 않았으므로 비밀번호가 요청되지 않습니다. 로그인 프로세스를 "즉시"로 만듭니다.

그러나 보안을 희생하지 않고(특정 계정을 사용하는 모든 사람이 원격 서버에 로그인할 수 있으므로 컴퓨터에서만 발생하므로 이는 분명합니다).

하지만 다시 말하지만, StrictHostKeyChecking을 조작하는 것은나쁜아이디어이며 완전히 불필요합니다.

관련 정보