제가 질문하는 것이 맞는지 잘 모르겠지만 기본적으로 이 프로세스를 자동화하고 싶습니다.
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
'
}
cat
id_rsa.pub 파일에서 쉘 파이프를 제거할 수도 있지만 , 이 정도면 계속 진행할 수 있다고 생각합니다.
편집:
작동 방식은
기본적으로 원격 호스트에서 새 셸을 시작하여 전달한 명령 ssh
(따옴표)을 실행하는 것입니다. 이 cat >> .ssh/authorized_keys
섹션에 도달하면 아직 STDIN에서 읽은 것이 없으므로 STDIN의 데이터가 cat ~/.ssh/id_rsa.pub
여전히 남아 있습니다. cat
STDIN에서 데이터를 읽고 이를 새로운 Authorized_keys 파일로 리디렉션합니다. 그런 다음 나머지 명령을 실행합니다.
답변2
원격 서버에 ID를 추가하고 필요한 경우 적절한 권한이 있는 ~/.ssh 트리를 만듭니다.
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server