SSH에 연결한 후 셸 명령을 계속 실행합니다.

SSH에 연결한 후 셸 명령을 계속 실행합니다.

제가 질문하는 것이 맞는지 잘 모르겠지만 기본적으로 이 프로세스를 자동화하고 싶습니다.

  scp ~/.ssh/id_rsa.pub [email protected]:~/
  ssh [email protected]
  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를 통해 서버에 연결한 후 명령을 계속 실행할 수 있는 방법이 있습니까?

답변1

다음은 약간 다른 작업 방식입니다.

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에서 읽은 것이 없으므로 STDIN의 데이터가 cat ~/.ssh/id_rsa.pub여전히 남아 있습니다. catSTDIN에서 데이터를 읽고 이를 새로운 Authorized_keys 파일로 리디렉션합니다. 그런 다음 나머지 명령을 실행합니다.

답변2

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

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

관련 정보