SSH를 통해 실행되는 sudo 명령의 출력을 캡처하시겠습니까(비밀번호 프롬프트 없이)?

SSH를 통해 실행되는 sudo 명령의 출력을 캡처하시겠습니까(비밀번호 프롬프트 없이)?

이 명령을 실행하면 예상대로 출력되며 /root내 서버의 디렉터리가 나열됩니다.

~ bash -c "ssh -t myserver 'sudo ls /root'"

Enter passphrase for key '/home/james/.ssh/ed25519': 
[sudo] password for myserver: 
snap
Connection to 167.172.xxx.xxx closed.

그러나 하위 쉘을 사용하여 해당 출력을 변수로 가져오려고 하면 SSH 비밀번호를 입력한 후 SSH 세션이 중단됩니다.

➜  ~ var=$(bash -c "ssh -t myserver 'sudo ls /root'")

Enter passphrase for key '/home/james/.ssh/ed25519': 

그대로 유지됩니다. Enter를 다시 눌러도 새 줄이 생성되지 않으며 ctrl-C로 취소할 때까지 아무 일도 일어나지 않습니다.

서브셸에서 다르게 작동하는 이유는 무엇이며, ssh 명령의 출력을 로컬 변수로 가져오려면 어떻게 해야 합니까?

편집: @KamilMaciorowski가 지적했듯이 stderr과 stdout은 하나로 병합됩니다. (실제로 비밀번호를 입력할 수 있으며 캡처된 출력에는 비밀번호 프롬프트와 예상 출력이 포함됩니다.)

var=$(bash -c "ssh -t stash 'sudo ls /root'")
Connection to 167.172.xxx.xxx closed.
➜  ~ echo $var
[sudo] password for stash: 
snap

그가 링크한 스레드는 내가 원하는 것이 불가능하다는 것을 나타내는 것 같았기 때문에 출력 문자열을 조작하는 것이 최선의 선택일 것이라고 생각했고 잘 작동했습니다.

var=$(bash -c "ssh -t stash 'sudo ls /root'" | tail -n +2)

그러나 원격 명령의 출력을 로컬 변수로 캡처하는 더 좋은 방법이 있습니까?

관련 정보