it-swarm-ko.tech

비밀번호로 SSH 로그인을 자동화하는 방법은 무엇입니까?

비밀번호로 SSH 로그인을 자동화하는 방법은 무엇입니까? 테스트 VM을 구성하고 있으므로 강력한 보안은 고려되지 않습니다. 최소한의 구성으로 허용 가능한 보안을 위해 SSH를 선택했습니다.

전의)

echo password | ssh [email protected]

작동하지 않습니다.

누군가 나를 안내하는 몇 가지 트릭 으로이 작업을 수행했지만 지금 사용했던 트릭을 기억할 수 없습니다 ...

462
Eonil

비밀번호를 사용하지 마십시오. 암호가없는 SSH 키를 생성하여 VM에 푸시하십시오.

이미 SSH 키가 있다면이 단계를 건너 뛸 수 있습니다… Enter 키와 두 암호 모두 :

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

키를 대상 서버에 복사하십시오.

$ ssh-copy-id [email protected]
[email protected]'s password: 

이제 ssh '[email protected]'하고 체크인하십시오.

.ssh/authorized_keys

예상치 못한 키를 추가하지 않았는지 확인하십시오.

마지막으로 로그인을 확인하십시오…

$ ssh [email protected]

[email protected]:~$ 

ssh-agent 암호를 사용하여 키를 보호하려는 경우.

404
Cakemox
$ Sudo apt-get install sshpass
$ sshpass -p your_password ssh [email protected]
637
weekens

귀하의 질문에 대한 정답은 sshpass ( 자세한 내용은 다른 답변 참조 )이지만 더 안전한 방법은 SSH 키입니다. 당신은 단지 세 가지 쉬운 단계 해결책에서 떨어져 있습니다.

rsa keypair 생성을 시작하려면 다음 명령을 입력하십시오.

# ssh-keygen

'키를 저장할 파일을 입력하십시오'라는 메시지가 나타나면 Enter를 눌러 파일 이름을 비워 두십시오.

터미널에서 암호를 입력하라는 메시지가 표시되면이 암호도 비워두고 Enter를 누르십시오.

그런 다음 one simple command을 사용하여 키 쌍을 서버에 복사하십시오.

# ssh-copy-id [email protected]

이제 비밀번호없이 로그인 할 수 있습니다 :

# ssh [email protected]
74
lzap

사용 예상 :

#!/usr/bin/expect -f
#  ./ssh.exp password 192.168.1.11 id
set pass [lrange $argv 0 0]
set server [lrange $argv 1 1]
set name [lrange $argv 2 2]

spawn ssh [email protected]$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

예:

# ./1.ex password localhost ooshro
spawn ssh [email protected]
[email protected]'s password: 
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
Last login: Tue Mar  1 12:41:12 2011 from localhost
42
ooshro

아무도 plink에서 PuTTY-tools 우분투 패키지 :

plink [email protected] -pw mypass  [cmd]

Windows에서도 사용할 수 있으며 구문은 대부분 openssh 클라이언트와 호환됩니다.

17
eadmaster

이것은 당신에게 유용하지 않을 수도 있지만 Perl로 할 수 있습니다.

\#!/usr/bin/Perl  
use warnings;  
use strict;  

use Net::SSH::Perl;  
my $Host = 'remote.serv.er';  
my $user = 'root';  
my $pass = 'hunter2';  
my $ssh = Net::SSH::Perl->new('$Host');  
$ssh->login('$user', '$pass') or die "Oh noes! $!";
16
James L

SSH 싱글 사인온은 일반적으로 공개 키 인증 및 인증 에이전트를 사용하여 수행됩니다. test VM 키를 기존 인증 에이전트에 쉽게 추가 할 수 있습니다 (아래 예 참조). gssapi/kerberos와 같은 다른 방법이 존재하지만 더 복잡합니다.

sshpass

password가 사용 가능한 유일한 인증 방법 인 경우 sshpass 를 사용하여 자동으로 암호를 입력 할 수 있습니다. man page 보안 고려 사항 섹션에 특히주의하십시오. 세 가지 옵션 모두 암호는 어느 시점에서 일반 텍스트로 표시되거나 저장됩니다 .

익명 파이프 (sshpass에서 권장)

# Create a pipe
PIPE=$(mktemp -u)
mkfifo -m 600 $PIPE
# Attach it to file descriptior 3
exec 3<>$PIPE
# Delete the directory entry
rm $PIPE
# Write your password in the pipe
 echo 'my_secret_password' >&3
# Connect with sshpass -d
sshpass -d3 ssh [email protected]

# Close the pipe when done
exec 3>&-

Bash에서는 꽤 번거롭고 프로그래밍 언어로는 더 쉽습니다. 암호를 작성하기 전에 다른 프로세스가 파이프/fd에 부착 될 수 있습니다. 기회의 창은 상당히 짧으며 프로세스 또는 루트로 제한됩니다.

환경 변수

# Set your password in an environment variable
 export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh [email protected]

Sshpass가 실행되는 동안 귀하와 root는 프로세스의 환경 변수 (예 : 비밀번호)를 읽을 수 있습니다 (cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=). 기회의 창은 훨씬 길지만 여전히 다른 사용자가 아닌 자신의 프로세스 또는 루트로 제한됩니다.

명령 줄 인수 (최소 보안)

 sshpass -p my_secret_password ssh [email protected]

매뉴얼 페이지에 설명 된 것처럼 편리하지만 덜 안전합니다. 명령 줄 인수는 모든 사용자에게 표시됩니다 (예 : ps -ef | grep sshpass). sshpass는 인수를 숨기려고 시도하지만 모든 사용자 가 인수에 의해 전달 된 비밀번호를 볼 수있는 창이 여전히 있습니다.

사이드 노트

Bash HISTCONTROL 변수ignorespace 또는 ignoreboth로 설정하고 민감한 명령 앞에 공백을 추가하십시오. 그들은 역사에 저장되지 않습니다.


SSH 공개 키 인증

# Generate a key pair
# Do NOT leave the passphrase empty
ssh-keygen
# Copy it to the remote Host (added to .ssh/authorized_keys)
ssh-copy-id [email protected]

암호는 매우 중요합니다. 개인 키 파일을 얻는 사람은 암호 없이는 사용할 수 없습니다.

SSH 인증 에이전트 설정

# Start the agent
eval `ssh-agent`
# Add the identity (private key) to the agent
ssh-add /path/to/private-key
# Enter key passphrase (one time only, while the agent is running)

평소와 같이 연결

ssh [email protected]

개인 키는 암호화되어 있으며 암호 입력을 한 번만 입력하면됩니다 (안전한 입력 방법을 통해서도).

12
nrolans

암호 대신 SSH 키를 사용하고 싶지 않습니까? 그렇게하면 안전하고 자동적입니다.

8
Coops

자동화 요구에 따라 아마도 Ansible이 적합 할 것입니다. 암호 묻기, Sudo 암호 묻기, 다양한 사용 변경 방법, 암호화 된 비밀 (볼트)을 안전하게 사용하는 등의 작업을 훌륭하게 관리 할 수 ​​있습니다.

그것이 적합하지 않은 경우 다른 답변에서 제안한대로 Expect를 제안합니다.

4
Cameron Kerr

나는 passhhttps://github.com/clarkwang/passh

sshpass는 의도적으로 손상되었습니다.

ssh 서버가 이미 내 known_hosts에 추가되지 않은 경우 sshpass에서 서버를 알려진 호스트에 추가하라는 메시지를 표시하지 않습니다. passh에는이 문제가 없습니다.

원격 서버에 로그인하십시오.

$ passh -p password ssh [email protected]
1
Badr Elmers