성공적으로 실행된 후 빌드 스크립트는 명령을 사용하여 최종 바이너리를 FTP 서버에 복사하려고 시도합니다 scp
. 빌드하는 데 시간이 좀 걸리기 때문에 매번 비밀번호를 묻는 것이 싫기 때문에 SSH 키 쌍을 설정해 보았습니다.
[wbarlow@build-machine]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/wbarlow/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/wbarlow/.ssh/id_rsa.
Your public key has been saved in /home/wbarlow/.ssh/id_rsa.pub.
The key fingerprint is:
7f:b9:c7:a8:1b:77:ce:f8:b6:2a:e3:da:30:68:72:b7 wbarlow@build-machine
[wbarlow@build-machine]$ ssh-copy-id wbarlow@ftp-server
wbarlow@ftp-server's password:
Now try logging into the machine, with "ssh 'wbarlow@ftp-server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
그런 다음 FTP 서버에 로그인을 시도했지만 여전히 비밀번호를 묻는 메시지가 표시되었습니다. 새로 생성된 키가 존재하는 것을 확인했습니다.
[wbarlow@build-machine]$ ssh wbarlow@ftp-server
wbarlow@ftp-server's password:
[wbarlow@ftp-server]$ cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGUbr4vUeiY7D6sSrsHm469QAqCClchL
7h/HZ7TAc+1F2KsTTF078OSINqzz8NpKJqhlEusLn644PzYn9LmGTIc7IsMG9s+B2n4bZX
9Ypb0VqLSqTgfE2I0j84+SfAQ6MvGJQ0NupIXxXbaMLDlNq1cetnR8NeN+9JeBq4sI8p/a
ijFVARQ7/XSKwQQN30Nl6flTEM1CTDECJs5YsPOu3P54mF6PG2mBdFra6+VQfAZ6fboq9O
d24VNHLYVtUdK5RpWgx8agUalov0xq/3m2VeC5arrYpCVH1rGx6EMxoQS25kk7t9mzBUCj
ulXGWQX2DPR/Em0OIfvVfe/l4xtFfH wbarlow@build-machine
공개 키를 사용하여 다른 컴퓨터(예: 내 Git 저장소 호스트)에 인증할 수 있으므로 클라이언트에 문제가 있는 것 같지 않습니다.
그렇다면 FTP 서버가 인증된 키를 허용하도록 구성되었는지, 그리고 어떤 유형의 키를 허용하도록 구성되었는지 어떻게 확인합니까? 키가 예상 위치에 저장되어 있는지 어떻게 확인할 수 있나요? (ftp 서버의 홈 디렉터리는 이지만 거기에서 폴더를 복사해보려고 /var/ftp/wbarlow/
도 했습니다 .).ssh
/home/wbarlow/
내 .ssh
디렉터리는 모드 700이고 내 authorized_keys
파일은 모드 600입니다. 또한 755를 .ssh
디렉토리 로 사용해 보았습니다 .
/etc/ssh/sshd_config
FTP 서버에서 내 파일을 찾았습니다 . 전체 내용을 게시하지는 않지만 다음 줄이 있습니다.
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
내가 아는 한문서, 나는 이 줄이 내가 하고 싶은 일에 맞게 올바르게 설정되었다고 생각합니다(s/key는 ssh 키 쌍과 아무 관련이 없습니다. 그렇죠?).
아래는 연결 시의 상세 출력입니다.
[wbarlow@build-machine]:~$ ssh -v wbarlow@ftp-server
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ftp-server [(ip hidden)] port 22.
debug1: Connection established.
debug1: identity file /home/wbarlow/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/wbarlow/.ssh/id_rsa-cert type -1
debug1: identity file /home/wbarlow/.ssh/id_dsa type -1
debug1: identity file /home/wbarlow/.ssh/id_dsa-cert type -1
debug1: identity file /home/wbarlow/.ssh/id_ecdsa type -1
debug1: identity file /home/wbarlow/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1
debug1: match: OpenSSH_5.1 pat OpenSSH_5*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<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 [SNIP]
debug1: Host 'ftp-server' is known and matches the RSA host key.
debug1: Found key in /home/wbarlow/.ssh/known_hosts:1
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,gssapi-with-mic,password
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Cannot determine realm for numeric host address
debug1: Unspecified GSS failure. Minor code may provide more information
Cannot determine realm for numeric host address
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Unspecified GSS failure. Minor code may provide more information
Cannot determine realm for numeric host address
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/wbarlow/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Trying private key: /home/wbarlow/.ssh/id_dsa
debug1: Trying private key: /home/wbarlow/.ssh/id_ecdsa
debug1: Next authentication method: password
wbarlow@ftp-server's password:
답변1
SSH 서버의 구성 설정은 일반적으로 거기에 있지만 /etc/ssh/sshd_config
가장 먼저 확인해야 할 것은 위치와권한공개 키및 해당 상위 디렉토리서버에 복사한 것입니다.
원격에 대한 올바른 권한은 다음과 같습니다 .authorized_keys
비판적인SSH가 작동하려면 ssh-copy-id
공개 키를 단순히 원격 장치에 복사하는 대신 공개 키를 사용하는 이유입니다.
이를 이해하려면 ssh-copy-id
그것이 수행하는 작업을 분석하는 것이 유용할 수 있습니다.
가장 먼저 하는 일은 id_rsa.pub
대상 서버에 안전하게 복사하는 것입니다.
scp -P port $HOME/.ssh/id_rsa.pub username@ipaddress:destination_path
~/.ssh/
원격 시스템 에 배치됩니다 .
그것은 또한 것입니다이름을 바꿔라 id_rsa.pub
그래서 authorized_keys
당신은 결국
$ ~/.ssh/authorized_keys
원격 컴퓨터에서.
또한 권한을 설정합니다.비판적인즉, 파일 authorized_keys
은 다음보다 덜 안전해야 합니다.
-rw------- 1 wbarlow wbarlow 802 Nov 25 13:54 authorized_keys
그리고 .ssh
디렉토리는 755
예를 들어 다음 보다 덜 안전할 수 없습니다.
drwx------ 2 wbarlow wbarlow 4096 Jul 29 00:30 .ssh
나는 명령을 사용하는 경향이 있습니다
ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remoteIP
이렇게 하면 내가 원하는 특정 키가 원격지에 도달할 수 있지만 연결을 시도할 때 ssh가 로컬 컴퓨터에서 사용 가능한 모든 개인 키를 확인한다고 의심되기 때문에 이것이 문제가 될 것이라고 생각하지 않습니다.
또한 항상 그렇듯이 다른 사용자/프로그램이 적절한 파일 권한을 가질 수 있도록 포함 폴더($HOME)의 기본 권한을 확인하십시오.
답변2
SSH 서버의 구성 설정은 일반적으로 /etc/ssh/sshd_config에 있지만 가장 먼저 확인해야 할 것은 서버에 복사된 공개 키와 해당 상위 디렉터리의 위치와 권한입니다.
/etc/ssh/sshd_config는 다음과 같아야 합니다. sshd 서비스를 중지했다가 다시 시작해야 합니다.
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys