SSH에 연결되면 쉘 명령 계속


7

내가 묻는 질문이 정확한지 확실하지 않지만 기본적 으로이 프로세스를 자동화하고 싶었습니다.

  scp ~/.ssh/id_rsa.pub username@example.com:~/
  ssh username@example.com
  mkdir .ssh
  cat id_rsa.pub >> .ssh/authorized_keys
  rm id_rsa.pub
  chmod go-w ~
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys

그래서 나는 쉘 스크립트를 만들고 이것을 다음과 같이 내 .bash_profile에 넣을 수 있다고 생각했다.

setup_ssh () {
  scp ~/.ssh/id_rsa.pub $1:~/
  ssh $1
  #the following is happens when connected to the server using ssh
  mkdir .ssh
  cat id_rsa.pub >> .ssh/authorized_keys
  rm id_rsa.pub
  chmod go-w ~
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys
}

그러나 서버에 일단 연결되면 명령을 계속하지 않기 때문에 물론 작동하지 않습니다. ssh를 통해 서버에 연결되면 명령을 계속 진행할 수있는 방법이 있습니까?


2
Patrick의 답변 은 방법을 작동시키는 방법을 설명하며 ssh를 사용하는 방법에 대한 귀중한 교훈입니다. 키를 복사하는 특정 작업을 위해, 사용하지만 ssh-copy-id같은 forcefsck로 표시 , 그것은 바로이 작업에 적합합니다.
Gilles

이 특정 사용 사례에 대해서는 이 질문 을 참조하십시오 . 이것은 SSH를 통해 명령을 전달하는 것에 대한 일반적인 질문이기 때문에 이것을 열어 두었습니다. 그러나 받아 들여진 대답은 그것을 해결하지 못하여 결국 불행한 일입니다
Michael Mrozek

기분이 좋아지면 다른 쪽을 받아들이도록 변경하겠습니다. 그러나 내 질문의 목적으로 forcefsck는 나에게 더 나은 옵션을 주었다. 그들은 둘 다 좋은 대답입니다.
Marc

답변:


5

원격 서버에 아이디를 추가하고 필요한 경우 적절한 권한을 가진 ~ / .ssh 트리를 만듭니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

와우 .. 이것이 존재하는지 전혀 몰랐다. 대단하다.
Marc

9

작동하는 방식이 약간 다릅니다.

setup_ssh() {
  cat ~/.ssh/id_rsa.pub | ssh $1 '
    mkdir .ssh;
    cat >> .ssh/authorized_keys;
    chmod go-w .;
    chmod 700 .ssh;
    chmod 600 .ssh/authorized_keys
  '
}

catid_rsa.pub 파일에 쉘 파이프를 제거 하고 쉘 파이프를 사용할 수도 있지만 이것이 충분하다고 생각합니다.

편집 :
작동 방식
기본적으로 원격 호스트에서 새 셸을 시작하여 전달 한 명령을 ssh따옴표로 묶습니다. cat >> .ssh/authorized_keys파트에 도달 하면 STDIN에서 아직 읽은 것이 없으므로의 데이터 cat ~/.ssh/id_rsa.pub가 여전히 거기에 있습니다. catSTDIN에서 데이터를 읽은 다음이를 새로운 authorized_keys 파일로 리디렉션합니다. 그런 다음 나머지 명령을 실행합니다.


핵심은 원격 시스템에서 실행될 모든 명령이 ssh(작은 따옴표를 사용하여) 매개 변수라는 것 입니다.
Aaron D. Marasco

정말 고마워요. 어떤 이유로 그것은에 붙어있을 것입니다 cat >> .ssh/authorized_keys. 그래서 나는 내가 가지고있는 라인으로 설정했고 훌륭하게 작동했습니다. 정말 고마워!
Marc

실제로 나는 아래 답변과 함께 가야 할 것입니다. 이것이 이미 구현되었는지 몰랐습니다.
Marc

@Marc는 누군가의 대답을 획기적으로 바꾸는 나쁜 예절을 제시합니다. 내가 제안한 솔루션은 암호를 여러 번 입력 할 필요성을 없애고 임시 파일을 가질 필요성을 없애고 불필요한 명령을 제거했습니다.
Patrick

1
미안 패트릭 게시물 끝에 추가해야했습니다. 그래도 완전히 이해합니다.
Marc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.