저는 OS X Yosemite 10.10.5를 사용하고 있는데 SSH 클라이언트가 제가 설명하거나 수정할 수 없는 방식으로 작동하고 있습니다.
내 목표는 다음을 통해 서버에 연결하는 것입니다.
ssh -A [email protected]
이것을 추가하면 내 SSH 클라이언트가 내 키가 아닌 다른 키를 -v
시도할 수 없다는 것을 알 수 있습니다 . ~/.ssh/id_rsa
ssh-agent가 실행 중임을 확인했고, ssh-add -l
원하는 키가 추가되었는지 확인하는 데 사용했습니다.
이것이 내 로컬 bash 프롬프트에서 실행되는 것입니다.
# Run ssh-agent
bash-3.2$ eval $(ssh-agent)
Agent pid 7786
# Confirm it's running
bash-3.2$ sudo ps aux | grep ssh-agent
josh 7794 0.0 0.0 2432772 676 s000 S+ 1:32PM 0:00.00 grep ssh-agent
josh 7786 0.0 0.0 2480640 2180 ?? Us 1:31PM 0:00.04 ssh-agent
# Login successfully by explicitly specifying a key
bash-3.2$ ssh -i sandbox [email protected]
Last login: Tue Aug 18 20:13:31 2015 from X.Y.189.46
CoreOS stable (723.3.0)
core@ip-10-200-4-138 ~ $ exit
logout
Connection to 12.34.56.78 closed.
# Now attempt to connect using ssh-agent
bash-3.2$ ssh-add sandbox
Identity added: sandbox (sandbox)
bash-3.2$ ssh -A [email protected]
# My just-added key isn't tried, so I'm prompted for a password
[email protected]'s password:
어떤 도움이라도 대단히 감사하겠습니다!
고쳐 쓰다: 요청에 따라 자세한 출력은 다음과 같습니다.
bash-3.2$ ssh -v -A [email protected]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /Users/josh/.ssh/config
debug1: /Users/josh/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug1: Connecting to 12.34.56.78 [12.34.56.78] port 22.
debug1: Connection established.
debug1: identity file /Users/josh/.ssh/id_rsa type 1
debug1: identity file /Users/josh/.ssh/id_rsa-cert type -1
debug1: identity file /Users/josh/.ssh/id_dsa type -1
debug1: identity file /Users/josh/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7
debug1: match: OpenSSH_6.7 pat OpenSSH*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr [email protected] none
debug1: kex: client->server aes128-ctr [email protected] none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<2048<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA a8:d9:fb:07:a6:71:de:99:76:9e:55:9c:bd:68:87:55
debug1: Host '12.34.56.78' is known and matches the RSA host key.
debug1: Found key in /Users/josh/.ssh/known_hosts:164
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/josh/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /Users/josh/.ssh/id_dsa
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: password
답변1
언급한 대로 이 ssh
명령에는 이라는 키가 필요합니다 id_rsa
.
이 작업을 수행할 때:
$ ssh-add sandbox
sandbox
에이전트라는 키를 추가합니다 .
따라서 차이점이 있습니다.
SSH 명령줄의 솔루션은 파일 식별 옵션을 사용하는 것입니다.
ssh -i ~/.ssh/other_keys/sandbox ...
노트: 엄격한 제한이 있기 때문에 다른 키에는 하위 폴더를 사용합니다. 그러나 각각의 키가 있는 많은 서버에 액세스하면 문제가 발생할 수 있습니다.https://askubuntu.com/questions/419546/ssh-never-ask-for-a-password더 알아보기.
-i
이 옵션을 항상 사용하지 않으려면 다음 정보를 ~/.ssh/config
파일에 추가하세요.
Host example.com
Hostname example.com
User YourUserName
PasswordAuthentication no
HostbasedAuthentication no
IdentitiesOnly yes
IdentityFile /home/<your-user-name>/.ssh/other_keys/sandbox
ssh
이제 옵션이 자체적으로 발견됩니다 . IdentifyFile
검색은 을 기반으로 합니다 Host
. 예를 들어 다음과 같이 실제로 해당 행에 있는 모든 이름을 사용할 수 있습니다.
Host remote-sandbox
...
당신이 사용할 수 있도록
$ ssh remote-sandbox
명령줄 remote-sandbox
에서는 /etc/hosts
.
ssh-add
이 명령을 전혀 사용할 필요가 없습니다 . 명령 을 처음 실행하면 ssh
비밀번호를 묻는 메시지가 표시되며 사용 가능한 프록시가 있으면 자동으로 비밀번호가 저장됩니다. 사용하지 않는 컴퓨터에서 명령을 실행해야 하는 경우(또는 Docker와 같은 시스템을 사용하여 키를 미리 로드하는 경우 입력 셸이 종료되므로) 사용하는 것이 ssh-add
유용할 수 있습니다 .ssh
docker build ...
답변2
자세한 출력은 키가예제공됩니다. 그것은 단지 받아들여지지 않을 뿐입니다. 여기서 가장 일반적인 문제는 권한입니다.
원격 서버에서 다음을 실행합니다.
ls -ld $HOME $HOME/.ssh $HOME/.ssh/authorized_keys
다음과 같은 출력이 표시됩니다.
wwalker@serenity:~$ ls -ld $HOME $HOME/.ssh $HOME/.ssh/authorized_keys
drwx------. 66 wwalker wwalker 36864 2016-08-28 12:31:03.241 /home/wwalker
drwx------. 2 wwalker wwalker 32768 2016-08-28 11:57:52.282 /home/wwalker/.ssh
-rw-------. 1 wwalker wwalker 3182 2015-09-27 12:07:58.000 /home/wwalker/.ssh/authorized_keys
그룹 또는 기타 쓰기 권한이 있는 문제를 해결하세요.
답변3
sandbox
키 버전 1인가요, 아니면 버전 2인가요? 오래된 키라면 아마도 SSH 프로토콜 버전 1에서만 작동할 것입니다. 이 문제는 실행하여 해결할 수 있습니다.ssh -A -1 [email protected]