Scp password 옵션 - Scp password obsyeon

작업 때 많은 파일에 대한 SCP 명령어를 매번 입력하는게 번거로워서 스크립트를 만들었다.

그 때 사용한 패스워드를 옵션 값으로 넘겨주기.

# apt-get install sshpass
sshpass -p "password" scp -r :/some/remote/path /some/local/path

과장님이 아시면 패스워드 하드코딩으로 혼날테니, 작업 이후엔 늘 파일을 삭제 해둬야한다.

'Memo' 카테고리의 다른 글

Broken pipe error on scp  (0) 2021.03.05
윈도우서버 수동패치파일 일괄 실행  (0) 2020.09.12

개요

ssh 나 scp 를 사용할 경우 매번 암호를 넣어서 사용해야 하므로 자동화가 필요한 작업을 ssh 를 통해 수행할 경우 불편하다.

ssh 의 인증방식을 public-key 로 하고 서버에 등록해서 사용하면 암호를 입력하지 않고 자동으로 로그인 할 수 있다.

설정

  1. $HOME/.ssh 폴더에 public(id_rsa.pub), private(id_rsa) ssh 키 쌍이 없을 경우 ssh-keygen 명령어로 RSA 2048 비트의 key 쌍을 생성한다. 

    ssh-keygen -t rsa -b 2048

    CODE

  2. ssh-copy-id 명령어로 공개키를 연결할 서버에 전송

    ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

    CODE

  3. ssh-copy-id 가 없거나(Windows ) ssh-copy-id 실행이 어려울 경우 원격지에 로그인 한 후에 수동으로 공개키를 복사한다.

    ## Remote 에 공개키 복사 
    scp  id_rsa.pub myid@remote-host:/home/myid/
    ## 원격 서버에 로그인후에 전송한 공개키를 authorized_keys 에 등록
    cat id_rsa.pub >> ~/.ssh/authorized_keys

    BASH

    4. authorized_keys를 다른 계정이 읽고 쓸수 없게 600 mode(소유자만 rw 가능) 로 변경한다.

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    CODE

    다른 이가 읽을수 있도록 퍼미션이 설정되어 있으면 client 에 별다른 오류 메시지 없이 로그인에 실패하니 꼭 확인 필요.

    Scp password 옵션 - Scp password obsyeon

    ssh 로그인 실패 원인은 /var/log/secure 로그를 조회해서 확인 가능


ssh 개인키(private key) 복호화
 

  1. ssh-keygen 으로 공개키/개인키 쌍을 생성하면 개인키가 암호화되어 있다. 사용할 때 마다 암호를 입력해야 하므로 암호화된 개인키를 복호화 해야 한다. openssl 명령어로 id_rsa의 암호화를 풀 수 있다.

    cp ~/.ssh/id_rsa ~/.ssh/id_rsa.enc
    openssl rsa -in ~/.ssh/id_rsa.enc -out ~/.ssh/id_rsa

    CODE

    개인키의 복호화 해제시 개인키 파일이 유출되면 피해를 입을 수 있으니 file 을 다른 계정이 읽을수 없게 하고(chmod 0400 ~/.ssh/id_rsa) 유출에 주의해야 한다.

사용

  1. scp 를 사용하여 암호없이 파일 복사가 되는지 확인

    scp lesstif@myhost:/home/lesstif/mydata e:\backup

    CODE

    Windows Note

    Window 일 경우 msysgit 에 포함된 scp는 -i 옵션을 이용하여 명시적으로 identity_file을 지정해 줘야 할 수도 있다.

    scp -i c:\Users\lesstif\.ssh/id_rsa lesstif@myhost:/home/lesstif/mydata e:\backup

ssh 자동 로그인이 안 될때 해결방법

1. file permission 확인

.ssh 디렉토리와  authorized_keys 파일의 권한 설정 확인 (설정의 5번 항목 참고)

  • http://www.openssh.org/faq.html#3.14

2. SELinux context 확인

~/.ssh/authorized_keys 에 public key 를 추가했으나 자동 로그인이 안 됨 참고

Ref

  •  http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/ 



scp 자동화

1 방법 1: sshpass + scp[ | ]

sshpass -p패스워드 scp -o StrictHostKeyChecking=no 로컬파일 아이디@호스트주소:/폴더/파일명

[root@zetawiki ~]# sshpass -pP@ssw0rd scp -o StrictHostKeyChecking=no hello.txt :/root/hello.txt

→ 135.79.246.80(jmnote)에서 135.79.246.99(jmtest01)로 hello.txt 복사

2 방법 2: expect + scp[ | ]

expect <<EOF
spawn scp -oStrictHostKeyChecking=no hello.txt 아이디@호스트주소:/폴더/위치/
expect "password:"
        send "패스워드\r"
expect eof
EOF

[root@zetawiki ~]# expect <<EOF
> spawn scp -oStrictHostKeyChecking=no hello.txt :/root/
> expect "password:"
>         send "P@ssw0rd\r"
> expect eof
> EOF
spawn scp -oStrictHostKeyChecking=no hello.txt :/root/
's password: 
hello.txt                                                100%    6     0.0KB/s   00:00

3 같이 보기[ | ]

  • 리눅스에서 SFTP로 파일 올리기
  • expect
  • scp
  • 미디어위키 봇 자동화
  • Bash 스크립트에 expect 스크립트 넣기
  • 리눅스 SSH 로그인 점검
  • sshpass