비밀번호 없이 로그인하려면 ssh keygen을 사용하는 것이 권장된다는 점은 알고 있지만 무서운 점은 누군가가 어떤 방식으로든 내 컴퓨터에 액세스하면 저장된 키를 사용하여 모든 서버에 로그인할 수 있다는 것입니다.
그래서 저는 ID 파일에 비밀번호를 설정하고 스크립트가 엄청나게 길고 어려운 임의의 비밀번호를 사용하여 일반 텍스트로 ssh 로그인을 입력하도록 하여 프로세스를 약간 모호하게 할 생각입니다.
지금까지 아래와 같이 ssh-keygen을 생성하고 아래와 같이 .pub의 내용을 서버에 복사했습니다.
❯ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/username/.ssh/id_ed25519): testssh
Enter passphrase (empty for no passphrase): <-- This is NOT empty
Enter same passphrase again: <-- This is NOT empty
Your identification has been saved in testssh
Your public key has been saved in testssh.pub
The key fingerprint is:
SHA256:vWch2CbFW50FShjCZDJKW59x7iPdXc44FoYFxmr7XIM username@arch
❯ cat ~/testssh.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
[email protected]'s password:
이제 아래와 같이 키의 비밀번호를 묻습니다.
❯ ssh -i testssh [email protected]
Enter passphrase for key 'testssh':
하지만 이와 같은 것이 가능한지 알고 싶습니다.
❯ ssh -i testssh --passphrase="SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts" [email protected]
문제는 ID 파일을 사용하여 비밀번호를 매개변수로 사용하여 로그인하는 방법입니다.
내 주장을 명확하게 표현할 수 있었으면 좋겠어
답변1
OpenSSH 클라이언트를 사용한다고 가정하면 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.SSH패스.
sshpass -P "Enter passphrase for key" \
-pSomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts \
ssh -i testssh [email protected]
물론, 할 수 있다고 해서 꼭 해야 한다는 뜻은 아닙니다. 귀하의 질문에 대한 답변을 고려해 보시기 바랍니다.
답변2
SSH keygen을 사용하는 것이 권장된다는 것을 알고 있습니다.비밀번호 없이 로그인,
[...]
그래서 저는 그 과정을 조금 흐리게 하고 싶습니다.암호를 설정하세요신분증에는
이것은 약간 모순적으로 들리므로 무엇을 하고 싶은지 말하기가 어렵습니다.
대화형으로 로그인하는 경우 키/ID 파일을 사용할 때 비밀번호만 입력하면 됩니다.
반면에 어떤 사람에게 열쇠를 주어야 한다는 의미라면무인프로세스를 진행하고 동일한 시스템에 키 비밀번호를 저장하려는 경우 비밀번호가 전혀 없을 수도 있습니다.
하지만 이를 방지하려면 키에 일반(좋은) 비밀번호/비밀번호를 설정한 다음 다음을 사용할 수 있습니다.ssh-agent
무인 스크립트에서 사용할 수 있도록 암호화되지 않은 키를 저장합니다. 그런 다음 재부팅할 때마다 키 암호를 한 번만 입력하면 되며, 암호화되지 않은 키가 시스템 메모리에 남아 있는 동안 공격자는 드라이브를 훔쳐 이를 얻을 수 없습니다. 대신 시스템의 소프트웨어 보안을 손상시키거나 콜드 부팅 공격을 수행하여 메모리 내용을 읽어야 합니다.
그런 다음 force 명령도 사용하십시오.authorized_keys
키의 용도를 제한하기 위해 리모컨에 파일을 보관하세요.
스크립트에서 키를 사용할 수 있도록 하려면 ssh-agent
에이전트를 시작하고 다시 시작할 때마다 키를 추가하세요.
# start the agent, the output contains settings needed to talk to it
# and an 'echo' command printing its PID, remove that one here
ssh-agent | grep -ve ^echo > ~/script-agent-info
. ~/script-agent-info
# add the key to the agent, this asks for the passphrase
ssh-add ~/.ssh/script_id_rsa
그런 다음 스크립트에서
# load the agent settings we stored earlier
. ~/script-agent-info
# use the key
ssh somehost@somewhere
ssh-agent -a
(에이전트가 사용하는 소켓에 대해 임의의 이름을 생성하도록 하는 대신 에이전트에 경로를 알려준 다음 SSH_AUTH_SOCK
스크립트에서 설정할 수 있습니다.)
답변3
bash나 open-ssh만으로는 이를 달성할 수 있는 방법이 없는 것 같습니다.
나는 그것을 사용하여 작동시킬 수있었습니다예상되는
예상 스크립트:
spawn ssh -i testssh [email protected]
expect "Enter passphrase"
send "SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts\r"
interact
하나의 선:
expect -c "spawn ssh -i testssh [email protected];expect \"Enter passphrase\";send \"SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts\r\";interact"
Enter passphrase
비밀번호를 찾아 입력할 것으로 예상됩니다 send "SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts\r"
.
마지막으로 interact
대화형 상호작용
일반 텍스트 비밀번호는 일반적으로 사용하면 안 됩니다.