문제가 무엇인지 잘 모르겠습니다. 현재 새로 설치된 Kali Linux 2.0을 사용하고 있습니다. 다음은 Ubuntu 14.04에서 작동했지만 더 이상 작동하지 않습니다(실수로 변경했을 수도 있습니까?). 나에게는 올바른 것처럼 보이지만 실행될 때마다 차단됩니다.
backup_folder=$(ssh -i /home/dexter/.ssh/id_rsa $server 'ls -t '$dir' | head -1')
이것은 더 큰 스크립트의 일부입니다. $server 및 $dir이 설정되었습니다. 명령을 단독으로 실행하면 올바른 출력이 나오지만 연결이 종료되지는 않습니다.
답변1
명령이 중단되는 이유를 완전히 확신할 수는 없지만 서버에서 전체 파이프라인을 실행할 필요는 없습니다. 거기에서 하면 충분합니다 ls
.
backup_folder=$( ssh -i keyfile "$server" "ls -t -- '$dir'" | head -n 1 )
이는 $dir
원격 측의 값을 나타냅니다(여전히 로컬로 확장됨). 이 작업은 head
로컬에서 실행됩니다.
이는 또한 "에 대한 답변에 언급된 경고와 함께 제공됩니다.왜 `ls`를 구문 분석하지 *않나요*(그리고 어떻게 수행합니까)?".
답변2
나도 같은 문제가 있었고 man ssh 를 참조하여 다음을 발견했습니다.
# Problem: if you copy & paste those two lines together into a shell,
# then the second command is not executed.
# But if you run each line on its own, it will work
srcdirs=$(ssh myserver "ls -1 /home")
echo "$srcdirs" # command is also not recorded by history
# Solution: Redirect stdin from /dev/null
srcdirs=$(ssh -n myserver "ls -1 /home")
echo "$srcdirs"
이것이 귀하의 문제를 해결하기를 바랍니다...
답변3
최근에 같은 문제가 발생했습니다. 아마도 다음과 같이 명령 끝에 stdout에 대한 리디렉션을 추가해야 할 것입니다.
backup_folder=$(ssh -i /home/dexter/.ssh/id_rsa $server 'ls -t '$dir' | head -1' 2>&1)