비밀번호로 SSH 로그인을 자동화하는 방법은 무엇입니까? 테스트 VM을 구성하고 있으므로 강력한 보안은 고려되지 않습니다. 최소한의 구성으로 허용 가능한 보안을 위해 SSH를 선택했습니다.
전의)
echo password | ssh id@server
작동하지 않습니다.
누군가 나를 안내하는 몇 가지 트릭 으로이 작업을 수행했지만 지금 사용했던 트릭을 기억할 수 없습니다 ...
비밀번호로 SSH 로그인을 자동화하는 방법은 무엇입니까? 테스트 VM을 구성하고 있으므로 강력한 보안은 고려되지 않습니다. 최소한의 구성으로 허용 가능한 보안을 위해 SSH를 선택했습니다.
전의)
echo password | ssh id@server
작동하지 않습니다.
누군가 나를 안내하는 몇 가지 트릭 으로이 작업을 수행했지만 지금 사용했던 트릭을 기억할 수 없습니다 ...
답변:
비밀번호를 사용하지 마십시오. 암호가없는 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 id@server
id@server's password:
이제로 시스템에 로그인 ssh 'id@server'
하고 체크인하십시오.
.ssh/authorized_keys
예상치 못한 키를 추가하지 않았는지 확인하십시오.
마지막으로 로그인을 확인하십시오…
$ ssh id@server
id@server:~$
ssh-agent
암호를 사용하여 키를 보호하려는 경우 사용 방법을 살펴볼 수도 있습니다 .
$ sudo apt-get install sshpass
$ sshpass -p your_password ssh user@hostname
ssh
sshpass
history -r
명령을 실행 한 후 실행 기록을 지울 수 있습니다. 그래도 좋은 지적입니다.
귀하의 질문에 대한 정답은 sshkey 이지만 더 안전한 방법은 SSH 키입니다. 당신은있는 3 단계 떨어져 솔루션에서 :
rsa 키 쌍을 생성하십시오 .
# ssh-keygen
그런 다음 하나의 간단한 명령으로 서버에 복사하십시오 .
# ssh-copy-id userid@hostname
이제 비밀번호없이 로그인 할 수 있습니다 .
# ssh userid@hostname
ssh-copy-id
.
ssh-copy-id -i ~/.ssh/tatu-key-ecdsa user@host
사용 예상 :
#!/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 $name@$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact
예:
# ./1.ex password localhost ooshro
spawn ssh ooshro@localhost
ooshro@localhost'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
-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null
ssh 명령 을 추가 하고 known_hosts에 시스템을 허용하지 않도록하는 것이 좋습니다.
이것은 당신에게 유용하지 않을 수도 있지만 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! $!";
SSH 싱글 사인온은 일반적으로 공개 키 인증 및 인증 에이전트를 사용하여 수행됩니다. 테스트 VM 키를 기존 인증 에이전트에 쉽게 추가 할 수 있습니다 (아래 예 참조). gssapi / kerberos와 같은 다른 방법이 존재하지만 더 복잡합니다.
상황에서 password
사용할 수있는 유일한 인증 방법입니다, 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 user@host
# 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 user@host
sshpass가 실행되는 동안 귀하와 root는 프로세스의 환경 변수 (예 : 비밀번호)를 읽을 수 있습니다 ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). 기회의 창은 훨씬 길지만 여전히 다른 사용자가 아닌 자신의 프로세스 또는 루트로 제한됩니다.
sshpass -p my_secret_password ssh user@host
이 매뉴얼 페이지에 설명 된 것처럼 편리하지만 덜 안전합니다. 명령 줄 인수는 모든 사용자에게 표시됩니다 (예 :) ps -ef | grep sshpass
. sshpass는 인수를 숨기려고하지만 모든 사용자 가 인수에 의해 전달 된 암호를 볼 수 있는 창이 여전히 있습니다.
bash HISTCONTROL 변수 를 설정 ignorespace
하거나 ignoreboth
민감한 명령 앞에 공백을 추가하십시오. 그들은 역사에 저장되지 않습니다.
# 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 user@host
암호는 매우 중요합니다. 개인 키 파일을 얻는 사람은 암호 없이는 사용할 수 없습니다.
# 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 user@host
개인 키는 암호화되어 있으며 암호 입력을 한 번만 입력하면됩니다 (안전한 입력 방법을 통해서도).
암호 대신 SSH 키를 사용하고 싶지 않습니까? 그렇게하면 안전하고 자동적입니다.