암호를 항상 입력하지 않고도 ssh를 통해 원격으로 로그인 할 수 있기를 원합니다.
- 어떻게 설정합니까?
- 암호없는 세션을 실행하려면 다른 명령이 필요합니까?
암호를 항상 입력하지 않고도 ssh를 통해 원격으로 로그인 할 수 있기를 원합니다.
답변:
이 명령을 실행하십시오 :
ssh-keygen
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
키가 복사 된 후 정상적으로 ssh를 시스템에 ssh하십시오.
ssh user@host
명령을 실행 한 특정 머신에서 비밀번호를 입력하지 않고도 로그인 할 수 있습니다.
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
이것은 이미 SSH를 통해 서버에 성공적으로 연결할 수 있다고 가정합니다.
비밀번호를 사용하지 않고 자신을 식별 할 수있는 SSH 키 쌍을 생성해야합니다. 원하는 경우 암호로 키를 보호하도록 선택할 수 있지만 암호없이 SSH로 액세스 할 수 있도록 비워 둘 수 있습니다.
ssh-keygen
만듭니다이 id_rsa
와 id_rsa.pub
파일을. pub
파일은 서버에 어떤 일이 일어나는지, 개인 키 (인 id_rsa
) 당신과 함께 유지하고 자신을 식별하는 방법입니다 것입니다.ssh-copy-id user@server
사용자를 시스템 DNS 이름 또는 IP 주소를 가진 원격 사용자 및 서버로 바꿉니다. SSH 비밀번호를 입력하라는 메시지가 표시되면 비밀번호를 입력하면 모든 비밀번호가 성공적으로 완료되면 ssh user@server
비밀번호없이 기기에 액세스 할 수 있습니다.ssh-keygen
화면의 지시에 따라이 입력 한 다음 ssh-copy-id user@server
원격 컴퓨터와 원격 사용자 및 서버와 사용자를 교체
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
내가 보통하는 방법은 다음과 같습니다.
ssh-keygen -t rsa
(암호를 묻는 메시지가 표시되면 비워 두십시오)
그때:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(이를 위해서는 .ssh 폴더가 대상 호스트 이름의 홈 디렉토리에 있고 권한이 부여 된 키 파일이 있어야합니다)
물론, username을 원하는 username으로 바꾸고 hostname을 원하는 호스트 이름 또는 IP 주소로 바꾸십시오.
그 후에는 익숙한 것처럼 해당 상자에 SSH로 연결하십시오.
touch
과 chmod
Rinzwind의 대답에 명령?
.ssh/authorized_keys
파일을 0600 으로 chmod해야합니다. 그렇지 않으면 작동하지 않습니다
나는 보통 sshpass
그것을 sudo apt-get install sshpass
위해 사용하고 설치하고 다음과 같이 사용합니다
sshpass -p 'password' ssh your_username@your_server
sshpass
원격 서버에서 인증 방법을 변경할 수없는 경우 매우 유용한 해킹입니다!
비밀번호 인증 비활성화
SSH 서버를 가진 많은 사람들이 약한 암호를 사용하기 때문에 많은 온라인 공격자가 SSH 서버를 찾은 다음 임의로 암호를 추측하기 시작합니다. 공격자는 한 시간에 수천 개의 암호를 시도 할 수 있으며 충분한 시간이 주어지면 가장 강력한 암호도 추측 할 수 있습니다. 권장되는 솔루션은 비밀번호 대신 SSH 키를 사용하는 것입니다. 일반적인 SSH 키처럼 추측하기 어려운 암호는 634 개의 임의의 문자와 숫자를 포함해야합니다. SSH 키를 사용하여 컴퓨터에 항상 로그인 할 수 있으면 암호 인증을 완전히 비활성화해야합니다.
비밀번호 인증을 비활성화하면 특별히 승인 한 컴퓨터에서만 연결할 수 있습니다. 이렇게하면 보안이 크게 향상되지만 PC를 사전 승인하지 않고 친구의 PC 또는 실수로 키를 삭제할 때 자신의 랩톱에서 자신의 컴퓨터에 연결할 수 없습니다.
특별한 이유가없는 한 비밀번호 인증을 비활성화하는 것이 좋습니다.
비밀번호 인증을 비활성화하려면 sshd_config 파일에서 다음 줄을 찾으십시오.
#PasswordAuthentication yes
다음과 같은 줄로 바꾸십시오.
PasswordAuthentication no
파일을 저장하고 SSH 서버를 다시 시작한 후에는 로그인 할 때 비밀번호를 묻지 않아도됩니다.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
모든 사용자에게 영향을 줍 니까 ? 그렇지 않은 경우 일반 사용자의 경우이를 끄고 테스트하는 동안 루트를 변경하지 않은 상태로 두는 방법은 무엇입니까? 나는 그것을 foobar하고 완전히 잠그고 싶지 않습니다.
Permission denied (publickey).
가 PasswordAuthentication no
있습니다. 어떻게해야합니까? PasswordAuthentication no
다른 호스트에서 변경 합니까?
이 솔루션은 특히 Windows 를 사용하는 사용자 가 AWS 클라우드 및 GCE 클라우드의 클라우드 이미지를 포함하여 원격 시스템 에 ssh 할 수 있도록합니다.
최근이 솔루션을 사용하여 GCE에 새로 배포 된 vm 이미지를 원격 로그인했습니다.
puttygen
퍼티 겐 다운로드winscp
winscp 다운로드개인 키를 소유 한 경우 :
를 열고 puttygen
로드 버튼을 누른 다음 개인 키 ( *.pem
) 파일을 선택하십시오 .
개인 키를 소유하지 않은 경우 :
puttygen
,(소스 1에서 아래 링크 참조)
notepad
)PuTTY 키 생성기의 "OpenSSH authorized_keys 파일에 붙여 넣기위한 공개 키"섹션에서 공개 키 데이터를 복사하고 키 데이터를 authorized_keys
파일에 붙여 넣으십시오 .
이 파일에는 한 줄의 텍스트 만 있어야합니다.
authorized_keys 파일을 원격 시스템의 홈 디렉토리에 업로드하십시오.
.ssh
디렉토리 만들기 (없는 경우)
authorized_keys
파일을 .ssh
디렉토리로 복사 하십시오 .
(이것은 존재하는 모든 authorized_keys
파일 을 대체합니다 .이 점에 유의하십시오).
파일이 존재하면이 파일의 내용을 기존 파일에 추가하십시오.
권한을 설정하는 명령을 실행하십시오.
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
이제 ssh
매번 자격 증명을 입력하지 않고도 원격 컴퓨터에 접속할 수 있습니다 .
공개 / 프라이빗 키 쌍을 생성하고 새로 생성 된 공개 키를 사용하여 로그인하는 경우 비밀번호를 입력 할 필요가 없습니다. 키 링 및 / 또는 ssh 에이전트의 구성에 따라 암호로 키를 보호해야 할 수도 있습니다.
여기 당신을위한 많은 짧은 하우투 중 하나가 있습니다. 생성 된 개인 키를 개인용으로 유지하는 것이이 방법의 안전에 매우 중요합니다! 다른 사람과 공유하거나 용량에 관계없이 액세스해서는 안됩니다.
이 명령은 다음과 같이 상당히 강력한 키를 생성합니다 ~/.ssh/
.
ssh-keygen -b 4096
에서 ~/.ssh/
당신과 같은 공개 키를 찾을 수 있습니다 id_rsa.pub
. authorized_keys
전송 가능한 매체 (펜 드라이브)를 통해 전송하거나 서버에서 비밀번호 인증을 잠시 사용 가능하게 한 후 사용 ssh-copy-id ~/.ssh/id_rsa.pub username@server
하고 다시 사용 불가능하게 하여 해당 내용을 서버 파일에 추가해야 합니다.
암호를 사용하여 키를 보호하기로 선택한 경우 (첫 번째 단계에서) ssh-agent
또는 Ubuntu 키링을 사용하여 해당 pharse를 로컬로 보호 할 수 있으므로 항상 입력하지 않아도됩니다.
추가하려면 다음을 수행하십시오.
Mac에는 기본적으로가 ssh-copy-id
설치되어 있지 않으므로 직접 설치해야합니다.
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
https://github.com/beautifulcode/ssh-copy-id-for-OSX에서 더 많은 것을 찾으십시오
포트 전달을 수행 한 경우 명령은 다음과 같아야합니다.
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
따옴표가 필요합니다.
응용 프로그램 ssh
과 scp
원격 로그인 및 원격 복사 각각에 대해 암호를 제공하지 않고도 원격 호스트와 통신 할 수 있습니다. 이를 위해서는 아래에 설명 된 것과 같은 인증 절차를 따라야합니다. 클라이언트는 사용자가 앉아있는 컴퓨터를 의미하고 서버는 암호를 제공하지 않고 로그온하려는 컴퓨터를 의미합니다. 인증 절차의 단계는 다음과 같습니다.
$HOME/.ssh
.$HOME/.ssh/authorized_keys
또는 $HOME/.ssh/authorized_keys2
서버에 추가하십시오.세 가지 유형의 인증 프로토콜이 있습니다. ssh-keygen을 실행할 때 유형을 지정하십시오.
chmod 0700
이 파일을 다른 사람이 읽을 수 없도록하기 위해 가져와야 함 ) 및 identity.pub (공개 키)가됩니다.ssh-keygen -t rsa
파일 id_rsa
(개인 키) 및 id_rsa.pub
(공개 키) 를 실행하여 얻습니다.ssh-keygen -t dsa
파일 id_dsa
(개인 키) 및 id_dsa.pub
(공개 키) 를 실행 하여 얻은 것입니다.ssh-keygen을 실행할 때 기본 답변에 의존 할 수 있습니다 (암호를 제공하지 않음을 의미 함). 이로 인해 전체 설정이 간단하지만 안전하지 않습니다.
ssh 옵션으로 사용할 키 유형을 지정할 수 있습니다 . ssh -1
의 힘을 사용 RSA1의 반면 키 (프로토콜 버전 1), ssh -2
강제로 ssh를 시도하는 RSA 또는 DSA 키 만 (프로토콜 버전 2). 아래 예에서는 원격 호스트에 RSA1 및 DSA 키를 생성 및 설치 하여보다 유연하게 사용할 수 있습니다. .ssh
디렉토리에 구성 파일을 만들 수 있습니다.
Protocol 1,2
이것은 ssh가 RSA / DSA (프로토콜 버전 2) 전에 RSA1 (프로토콜 버전 1) 연결을 시도하게합니다 .
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
키를 생성 할 때 암호를 사용하지 않은 경우이 작업을 수행하면됩니다. ssh $ remote를 실행하여 연결을 테스트하고 비밀번호를 제공하지 않고 로그인 할 수 있는지 확인하십시오 ( ssh 를 사용 -1
하거나 -2
옵션으로 사용해야 할 수 있음 ). 물론 로그온하려는 모든 머신에 대해 절차를 반복 할 수 있습니다.
암호를 사용했다면 프로그램 ssh-agent
을 실행하여 특수 쉘을 시작한 다음 키 / 암호 조합을 ssh-add
로 등록해야합니다 . 자세한 내용은이 프로그램의 매뉴얼 페이지를 참조하십시오.sshd
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$HOST # name of client host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination host:
echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html 에서 복사
IdentitiesOnly를 yes로 설정했기 때문에 여기에서 모든 답변을 읽은 경우에도 비밀번호를 입력해야하는 사람들을위한 답변을 추가하고 싶습니다. 그리고 여기에 대한 답변은 git 또는 server의 키 인 여러 키를 관리하는 데 많은 시간을 절약 할 수 있습니다.
키를 생성하여 서버에 복사 한 후 :
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
작동하지 않는 것을 발견했습니다.
그런 다음 ~/.ssh/config
클라이언트 에서 파일 을 확인하기 위해 맨 아래에서 이것을 보았습니다.
Host *
IdentitiesOnly yes
그런 다음 위에 이것을 추가하십시오.
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
을 입력하여 로그인하면 ssh somename
됩니다.
그런 다음 원하는 이름을 사용하여 여러 개의 ssh 키를 추가 할 수 있으며 위의 4 줄과 같은 설정 만 구성 파일에 추가하면됩니다.
호스트는 나중에 서버를 연결할 때 입력하려는 이름입니다. HostName은 서버의 IP입니다. 사용자는 서버에 로그인 한 사용자 이름입니다. 그리고 identityfile은 생성 한 키를 저장하는 파일입니다.