암호를 여러 번 입력하는 대신 pssh
및 -A
스위치를 사용 하여 한 번만 프롬프트 한 다음 목록의 모든 서버에 암호를 제공 할 수 있습니다.
참고 : 이 방법을 사용하면을 사용할 ssh-copy-id
수 없으므로 SSH pub 키 파일을 원격 계정 파일에 추가하기위한 고유 한 방법을 롤링해야 ~/.ssh/authorized_keys
합니다.
예
다음은 작업을 수행하는 예입니다.
$ cat ~/.ssh/my_id_rsa.pub \
| pssh -h ips.txt -l remoteuser -A -I -i \
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 23:03:58 [SUCCESS] 10.252.1.1
[2] 23:03:58 [SUCCESS] 10.252.1.2
[3] 23:03:58 [SUCCESS] 10.252.1.3
[4] 23:03:58 [SUCCESS] 10.252.1.10
[5] 23:03:58 [SUCCESS] 10.252.1.5
[6] 23:03:58 [SUCCESS] 10.252.1.6
[7] 23:03:58 [SUCCESS] 10.252.1.9
[8] 23:03:59 [SUCCESS] 10.252.1.8
[9] 23:03:59 [SUCCESS] 10.252.1.7
위의 스크립트는 일반적으로 다음과 같이 구성됩니다.
$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'
높은 수준의 pssh
세부 사항
cat <pubkey>
공개 키 파일을 pssh
pssh
-I
스위치를 사용하여 STDIN을 통해 데이터를 수집합니다.
-l <remote user>
원격 서버의 계정입니다 (IP 파일의 서버에서 동일한 사용자 이름이 있다고 가정합니다)
-A
pssh
암호를 묻고 연결된 모든 서버에 대해 암호를 다시 사용하도록 지시 합니다.
-i
pssh
출력을 파일에 저장하지 않고 STDOUT에 전송하도록 지시 합니다 (기본 동작).
'...cmds to add pubkey...'
-이것은 현재 진행중인 작업 중 가장 까다로운 부분이므로이 부분을 자체적으로 분석합니다 (아래 참조).
원격 서버에서 실행되는 명령
다음은 pssh
각 서버에서 실행될 명령입니다 .
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
순서대로 :
원격 사용자의 umask를 077로 설정하면 우리가 만들 디렉토리 또는 파일에 따라 권한이 다음과 같이 설정됩니다.
$ ls -ld ~/.ssh ~/.ssh/authorized_keys
drwx------ 2 remoteuser remoteuser 4096 May 21 22:58 /home/remoteuser/.ssh
-rw------- 1 remoteuser remoteuser 771 May 21 23:03 /home/remoteuser/.ssh/authorized_keys
디렉토리를 만들고 ~/.ssh
이미 존재하는 경우 경고를 무시하십시오.
$afile
authorized_keys 파일의 경로와 함께 변수를 설정 하십시오.
cat - >> $afile
-STDIN에서 입력을 받고 authorization_keys 파일에 추가
sort -u $afile -o $afile
-authorized_keys 파일을 고유하게 정렬하여 저장합니다
참고 : 마지막 비트는 동일한 서버에 대해 위를 여러 번 실행하는 경우를 처리하는 것입니다. 이렇게하면 펍키가 여러 번 추가되지 않습니다.
단일 진드기를 주목하십시오!
또한 이러한 모든 명령이 작은 따옴표 안에 중첩되어 있다는 사실에 특히주의하십시오. $afile
원격 서버에서 실행될 때까지 평가를 받고 싶지 않기 때문에 중요 합니다.
' \
..cmds... \
'
위의 내용을 확장하여 여기에서 쉽게 읽을 수 있지만 일반적으로 다음과 같이 한 줄로 모두 실행합니다.
$ cat ~/.ssh/my_id_rsa.pub | pssh -h ips.txt -l remoteuser -A -I -i 'umask 077; mkdir -p ~/.ssh; afile=~/.ssh/authorized_keys; cat - >> $afile; sort -u $afile -o $afile'
보너스 자료
를 사용 pssh
하면 파일을 작성하지 않고 동적 컨텐츠를 제공 -h <(...some command...)
하거나 다른 pssh
스위치를 사용하여 IP 목록을 작성할 수 있습니다 -H "ip1 ip2 ip3"
.
예를 들면 다음과 같습니다.
$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...
위의 내용은 내 ~/.ssh/config
파일 에서 IP 목록을 추출하는 데 사용될 수 있습니다 . 물론 printf
동적 컨텐츠를 생성 하는 데 사용할 수도 있습니다 .
$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....
예를 들면 다음과 같습니다.
$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09
seq
형식화 된 숫자 시퀀스도 생성 할 수 있습니다 !
참조 및 유사한 도구 pssh
pssh
위와 같이 사용하지 않으려면 다른 옵션을 사용할 수 있습니다.