한 줄로 SSH하는 방법 컴퓨터에 어떻게

한 줄에 SSH를 통해 다른 컴퓨터에 어떻게 연결합니까? 내가해야한다면 ssh host@IP두 번째 줄에 비밀번호를 입력해야합니다. 나는 이런 식으로 할 수 있다고 생각 ssh host@IP | echo password했지만 : 암호를 묻기 전에 암호를 입력합니다.



답변

암호가 매우 안전하지 않으므로 명령 행에 비밀번호를 입력하는 대신 SSH 키를 사용하여 인증해야합니다 .

이것이 작동하는 방식은 일단 SSH 키를 설정 한 후에는 명령을 실행하기 만하면됩니다.

ssh user@host

다른 것을 입력하지 않으면 자동으로 로그인됩니다.


macOS에서 SSH 공개 키를 Mac / FreeBSD / Linux로 복사

암호 기반 인증 (암호 입력)을 통해 원격 서버에 액세스 할 수 있으며 개인 / 공개 키 쌍을 이미 생성 한 것으로 가정합니다 (그렇지 않은 경우 아래 참조). 다음 예에서는 RSA를 사용하고 있습니다. 우선 키를 복사 해 봅시다 ( “home”디렉토리는 macOS, Linux, BSD 등에서 다릅니다) :

SCP 사용 :

scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/

또는 단순히 파일을 정리하면 authorized_keys(이 방법을 선호합니다) :

cat id_rsa.pub | ssh username@hostname ' cat >>.ssh/authorized_keys'

키 이름이 다를 수 있습니다. .ssh 디렉토리가 원격 서버에 없으면 로그인하여 작성해야합니다.

이제 키가 Mac에서 원격 서버 로 복사되었습니다 . 원격 서버에서 SSH 공개 키에 대한 올바른 권한을 설정하십시오.

chmod 600  ~/.ssh/id_rsa.pub

다음으로 SSH authorized_keys 파일에 키를 추가하십시오. 파일이 없으면 작성하십시오.

파일이 authorized_keys이미 존재 ~/.ssh하면 다음 명령을 사용하십시오.

cat id_rsa.pub >> authorized_keys

파일이 존재하지 않으면 다음 명령을 입력하십시오.

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys
chown user:group authorized_keys

macOS에서 SSH 공개 / 개인 키 생성

응용 프로그램-> 유틸리티-> 터미널로 이동하여 터미널을 엽니 다.

터미널에서 다음 명령을 사용하여 키 생성을 시작하십시오.

ssh-keygen -t rsa

다음으로 개인 키 파일을 만들 위치를 제공하라는 메시지가 표시됩니다.

키를 저장할 파일을 입력하십시오 ( /Users/username/.ssh/id_rsa) :

이 키를 비워두면 기본 위치 ()에 키가 생성됩니다 /Users/username/.ssh/id_rsa. 공개 키 파일은 동일한 위치에 이름은 동일하지만 확장자는 .PUB입니다.

비밀번호 문구를 선택하라는 메시지가 표시됩니다. 개인 키를 사용하기 위한 암호는 선택 사항 입니다.

Enter passphrase (empty for no passphrase):

SSH 키가 생성되었습니다.

암호를 입력하면 연결할 때마다 암호를 입력해야합니다. 이 유틸리티 ssh-agent는 암호를 메모리에 유지하여 동일한 세션에있는 동안 연결할 때마다 암호를 수동으로 입력 할 필요가 없습니다. 자세한 내용은man ssh-agent


답변

몇 가지 가능성이 있습니다. 귀하의 예는 분명히 작동하지 않지만 sshpass유틸리티를 사용하여 비슷한 것을 얻을 수 있습니다 .

sshpass -p password ssh host@IP

참고 이하지 않는 것이 좋습니다 (가) 있기 때문에 password다른 프로세스 또는 쉘의 역사에서 볼 수 있습니다.

SSH 키를 사용하여 비밀번호없는 인증을 설정하는 것이 훨씬 더 좋은 방법입니다. 한마디로 :

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP


답변

나는 이것에 대한 답을 찾기 위해 오랜 시간을 보냈습니다. 그것이 안전하지 않고 RSA 키 ( 보다 안전하고 신뢰할 수있는 아이디어 ) 를 사용하라고 말하는 모든 사람들에도 불구하고 가능합니다.

이 프로그램을 사용하십시오 expect. Expect는 stdout (그리고 올바르게 구성된 경우 stderr이라고 생각합니다)을보고 특정 메시지를 기다리고 출력으로 응답합니다. 실제로 그 자체는 스크립팅 언어이며, 같은 일을 할 때 타이밍 때문에 자체 스크립트가 제대로 작동하는 데 어려움을 겪었습니다. 그러나 expect이라는 편리한 유틸리티도 포함되어 autoexpect있습니다.

autoexpect를 사용하면 사용자를보고 예상 스크립트를 생성합니다. autoexpect와 원하는 명령을 실행하면됩니다.

autoexpect ssh host@ip 

평상시처럼하세요. exitssh’d 쉘 에 입력하여 프로그램을 종료 하면 스크립트가 생성됩니다. 작성중인 전체 스크립트가 expect 스크립트에 포함되지 않게 script.exp하려면 exit명령을 셸에 입력하기 전에 autoexpect ( ) 에서 스크립트를 편집하여 종료 할 수 있습니다 . 스크립트 끝을 변경하기 위해 이동하려는 행은 다음과 같습니다.

expect eof

파일의 끝을 예상한다는 의미입니다. 이것이 도움이되기를 바랍니다!


답변

사용은 expect테스트 스위트 이외의 아무것도 ssh 연결에 로그인 할 그냥 일반 잘못된 것입니다.

@ ben-a가 찾고있는 것은 이미 ssh로 구현되었습니다. 요령은 그것을 사용하는 방법입니다. 그래서 여기에 간다 :

  1. 을 사용하여 공개 / 개인 키 쌍을 생성하십시오 ssh-keygen. ECDSA 또는 RSA를 -t(또는 유형)으로 사용하고 RSA의 경우 2048 또는 4096을 -b(또는 BITS 길이)로 사용하십시오. 이것은 글을 쓰는 순간에 충분합니다. 항상 암호를 사용하십시오!
  2. 활용 ssh-copy-id(서버 일명)에에에 기계 당신에있어 기록을 작성하는 상술 한 방법 위 또는를 ~/.ssh/authorized_keys파일. 그 안에 방금 생성 한 공개 키의 사본이 있습니다.
  3. 이제 ‘서버'(또는 클라이언트)에 로그인하는 데 사용하는 컴퓨터에서 파일을 엽니 다 ~/.ssh/config. 존재하지 않는 경우 만들 수 있습니다.
  4. 이 파일에서 필요에 따라 다음을 추가하십시오.

    host <name you want to use for this connection>
        Hostname <DNS or IP of the server>
        user <user name you want to use>
        identitiesonly yes
        identityfile <path to the private key>
  5. 이제 ssh <name>연결 설정 에만 사용할 수 있지만 여전히 키 암호가 필요합니다. 이 문제를 해결하려면이 용도로 개발되고 포함 된 ssh-agent를 사용하십시오. 에이전트에 키를 추가하려면을 사용하십시오 ssh-add <path to keyfile>. 암호를 묻는 메시지가 표시되고이 세션에 대한 키가 안전하게 저장됩니다. “ssh-agent를 찾을 수 없습니다”라는 오류가 발생하면 에이전트가 시작되지 않았 음을 의미합니다. 을 사용하여이 세션에서 시작할 수 있습니다 ssh-agent bash. 그러면 에이전트가 활성화 된 새 셸이 시작됩니다.

이 단계를 사용하면 자격 증명을 도용하여 누군가가 나를 가장하는 것을 어렵게 할뿐만 아니라 사용 편의성을 유지해야합니다 (일반 암호보다 사용하기 더 쉽습니다).


답변