내 계정과 서버에 로그인하기 위한 SSH 키 세트가 있습니다. 하지만 기본 직장 프로필을 USB 드라이브로 옮긴 이후(동기화 및 사용 편의성 등의 이유로)곧장인증을 위해 구성 파일의 SSH 키를 사용하지만 로컬 복사본을 생성해야 합니다.
일반적인 SSH 워크플로는 일반적으로 진행됩니다.
ssh-add $HOME/.ssh/id_server_key
ssh username@domain
문제없이 작동합니다. 그러나 모든 컴퓨터에 내 키의 복사본이 있는 것을 방지하기 위해 해당 키를 vfat
.~해야 한다다음과 같이 됩니다:
ssh-add /run/media/myself/USB/.ssh/id_server_key
ssh username@domain
...이건 작동하지 않습니다. SSH는 나를 보호하기 위해 몇 가지 작업을 수행하는 것에 대해 불평합니다.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @경고: 보호되지 않은 개인 키 파일입니다! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @ "id_server_key"의 권한 0644가 너무 열려 있습니다. 귀하의 개인 키 파일은 다른 사람이 접근할 수 없어야 합니다. 개인 키는 무시됩니다. 잘못된 권한: 키 무시: id_server_key 권한이 거부되었습니다(공개 키).
나는 그것을 이해할 수 있지만 사실은 그렇지 않습니다.진짜이 상황에서 나를 보호해주세요.
USB 드라이브는 fmask를 사용하여 배포판에 자동으로 마운트됩니다 022
. fmask를 사용하여 USB 드라이브를 마운트 해제하고 다시 마운트 077
할 수 있지만 (1) 매번 수퍼유저 권한이 필요하고 (2) SSH 키뿐만 아니라 장치의 모든 파일에 영향을 미칩니다.
umask
몇 가지 팁과 요령에서 본 것처럼 이전에 사용된 적이 있더라도 키에 대한 심볼릭 링크를 만들어 보았습니다 .
cd .ssh
umask 077
ln -s /run/media/myself/USB/.ssh/id_server_key
하지만 이 방법으로는 심볼릭 링크에 권한을 사용할 수 없으므로 아무것도 얻지 못합니다.
그래서 뭐옵션나의 목표라면아니요기계에 키의 물리적 사본이 있습니까? 기계 중 하나는 여러 장소로 이동하는 가정용 노트북이므로 일부 키가 발견되는 것을 방지하는 데 관심이 있습니다.
지금까지 나는 다음을 고려했습니다.
ssh-add
예를 들어 SSH가 외부 장치의 키를 (대부분) 수락하도록 강제하는 옵션이 있습니까 ? (저는 있어야 한다고 생각합니다. 대부분의 프로그램은 "내가 하고 있는 일을 알고 있습니다" 기호를 따르지만 지금까지는 맨페이지에서 찾을 수 없습니다.bindfs
가 디렉토리에 설정되어 있지만.ssh/
문제는 디렉토리가 비어 있지 않다는 것입니다(known_hosts
다른 데이터가 포함되어 있기 때문입니다).fuse-zip
- 열쇠를 뒤집는 것도/dev/shm
가능한 경로인 것 같습니다.
편집하다: @Gilles의 의견에 따르면 예, bindfs
문제가 해결되었습니다. 맨페이지를 확인한 후 다음 호출을 사용하여 초기 테스트에 성공했습니다.
bindfs -n -r -p 0700 -o nonempty /run/media/myself/USB/.ssh/ ~/.ssh
이는 다른 사용자에게 액세스 권한을 바인딩하지 않으며(심지어 분명히 root
!) 읽기 전용이며 반사 0700
권한을 갖습니다. 이 반영은 내가 처음으로 binfs를 사용하기 시작했을 때 빠졌던 것입니다. 이는 nonempty
기존 파일로 인해 known_hosts
원래 작업 흐름을 완전히 보존합니다 (예: 정보를 추가할 수 없다는 추가 경고 메시지 제외 known_hosts
(결국 신경쓰지 않을 수도 있음).
물론, 원래 제안한 대로 작업을 약간 더 쉽게 하기 위해 파일 시스템을 다른 디렉토리(/dev/shm)에 바인딩했습니다.
저는 encfs
아직 USB 드라이브에 별로 관심이 없기 때문에 개인 정보 보호 측면에서는 이 정도면 충분합니다.
답변1
다음을 통해 외부 키를 로드할 수 있습니다.명명된 파이프,예를 들어
$ mkfifo -m=600 fifo
$ cat /external/media/.ssh/id_server_key >fifo | ssh-add fifo
프로세스 대체를 사용하는 것도 가능합니다(bash/zsh와 유사한 구문 사용).
$ ssh-add <(cat /external/media/.ssh/id_server_key)
위의 명령은 다음과 동일합니다: cat /external/media/.ssh/id_server_key | ssh-add -
.
당신의 가정익명 파이프에는 올바른 권한이 있습니다.(검사 통과 :) stat <(:)
.
또는 표준 입력에서 로드해 보세요.
$ cat /external/media/.ssh/id_server_key | ssh-add -
답변2
ssh-add
중요한 권한 확인을 우회할 수 있는 옵션은 없습니다. 프로그램을 다시 컴파일하고 이 검사를 비활성화할 수 있습니다.
Bindfs가 작동해야 합니다. 설치할 필요가 없습니다 ~/.ssh
. 특별한 목적의 위치에 설치하고 이를 수행하는 스크립트를 작성하십시오 ssh-add ~/.ssh-private-keys-bindfs
.
설정이 매우 안전하지 않으므로 ssh가 정확합니다. 귀하가 유일한 사용자가 아닌 컴퓨터에 드라이브를 연결하지 마십시오.
답변3
이는 다음 줄에 표시된 것처럼 권한 문제입니다.
"id_server_key"의 권한 0644가 너무 열려 있습니다.
이는 개인 키에 대한 권한이 너무 공개되어 SSH가 키의 신뢰성을 보장할 수 없고 사용을 주저하기 때문에 발생합니다.
따라서 권한 변경을 지원하지 않는 썸 드라이브의 VFATness를 고려하여 /etc/fstab
파일에 다음 줄을 추가하는 것과 같은 작업을 수행할 수 있습니다.
LABEL=USB none msdos -u=USERID,-m=PERMS
여기서 USERID는 숫자로 된 사용자 ID이고 PERMS는 700입니다. 이렇게 하면 자동 설치 프로그램이 항상 그룹이나 다른 권한 없이 USB 드라이브를 해당 사용자로 마운트하도록 지시해야 합니다.
파일 시스템이 권한을 지원하는 경우 다음을 수행하여 문제를 해결하는 것이 더 쉽습니다.
chmod 700 /run/media/myself/USB/.ssh
chmod 400 /run/media/myself/USB/.ssh/id_server_key
답변4
Ubuntu 20.04에서는 다음이 제대로 작동합니다.
cat ~/.ssh/my-key.pem | ssh-add -
Identity added: (stdin) ((stdin))