한 줄로 SSH하는 방법


26

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


3
이런 종류의 사고는 텔넷 시대에서 비롯된 것으로 인터넷이 더 안전한 곳이었을 때를 기대합니다. Allen의 대답은 맞습니다. Jakuje의 대답은 기술적으로 사실이지만 대부분의 장소에서 일하기위한 도구는 아닙니다.
Criggie

3
암호없는 로그인을 설정하는 데 좋은 질문입니다. 수락 된 답변을 다시 방문하시기 바랍니다. Jakuje의 대답은 정확하고 작동하며 Allan의 대답에 설명 된 SSH 키를 사용하는 것이 올바른 방법입니다.
Scot

경우 ssh표준 입력에서 암호를 읽을 것, 다음 echo password | ssh host@IP작업을 것이지만, 일반적으로 SSH 시도는 단말기에서 직접 읽을 수 있습니다.
Paŭlo Ebermann 2016 년

답변:


82

암호가 매우 안전하지 않으므로 명령 행에 비밀번호를 입력하는 대신 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


6
절대적으로이 키는 인터넷을 통한 ssh 액세스를위한 비밀번호를 완전히 대체 할 수 있으며 대체해야합니다. 개인 키의 보안 필요성을 확장하여 모든 컴퓨터에 적용 할 수있는 것은 아니라고 제안합니다.
Criggie

+1 이것은 답변에 대한 설명뿐만 아니라 설명에 따른 답변이기도합니다. 사용자가 쉽게 따라하고 더 안전하게 할 수 있도록 도와주는 것은 제 책의 장점입니다.
Monomeeth

7
좋은 대답입니다. ssh-copy-id위의 일부를 자동화하기위한 훌륭한 도구 라는 것을 추가하고 싶었습니다 .
Scot

ssh-agent에 대한 언급 도 도움이 될 수 있습니다. 대부분의 OS X / macOS 버전이 함께 제공되며, 키가 비밀번호로 보호되어 있어도 비밀번호없이 로그인 할 수 있습니다.
Qsigma

1
@Scot-기본적으로 macOS의 일부가 아니며 Homebrew 또는 MacPorts를 통해 설치 해야합니다 . 나는 한 줄이나 짧은 자체 작성 스크립트로 달성 할 수있는 소프트웨어를 설치하는 팬이 아니며 그 이유 때문에 그것이 대답의 범위를 벗어났다고 생각했습니다. 그러나 유용성이 적고 언급 할 가치가 있습니다.
Allan

13

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

sshpass -p password ssh host@IP

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

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

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

나는 sshpass당신이 추천 한대로 시도했지만 명령을 찾을 수 없다고 말했습니다.
Ben A.

8
글쎄 ... 아마도 설치해야 할 것입니다. 그리고, 나는 그것을 권장하지 않습니다. ssh 키를 사용하여 비밀번호없는 인증을 설정하십시오.
Jakuje

4
@BenA. 공개 / 개인 키패드를 정의하고 관련 두 시스템 모두에서 설정하여 비밀번호없는 인증을 설정하십시오. 그것은 어떤 암호보다 훨씬 더 쉽고 실제로 더 안전합니다
nohillside

8
천 번 아니 sshpass는 ssh를 사용하지만 키를 올바르게 수행하지 않는 장치에 연결하는 데 사용되는 더티 해킹입니다. 주요 용도는 설정 스크립트입니다. 다중 사용자 시스템에서 sshpass를 사용하지 않으면 ps auxw | grep sshpass 다른 사용자에게 ssh 비밀번호를 알려줍니다.
Criggie

1
@Criggie가 아닙니다. 키 기반 솔루션보다 100 % 뒤떨어졌지만 내부 작업용 Raspberry Pis (임의의 작업과 임의의 클라이언트에 의해 액세스 됨)를 사용했습니다. 내부 용으로 키를 전달하는 것은 번거 롭습니다. 명령을 실행하면 다음과 같은 출력이 제공 pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh pi@192.168.0.208됩니다.. 는 zzzzzzzz문자입니다 sshpass는 비밀번호의 내용을 숨 깁니다. 아마도 초기 반복은 프라이버시를 덜 인식했을 것입니다.
flith

3

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

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

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

autoexpect ssh host@ip 

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

expect eof

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


1
다른 사람이 아직 말하지 않은 경우 : Ask Different에 오신 것을 환영합니다!
Synoli

2

사용은 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. 그러면 에이전트가 활성화 된 새 셸이 시작됩니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.