SSH에서 원격 값 가져오기

SSH에서 원격 값 가져오기

다음 스크립트가 있습니다.

ssh ip@host /bin/bash << EOF
hostname # Print the remote hostname
A=`hostname`
echo \${A} # Print the local hostname
EOF

원격 서버에서 값을 가져와 스크립트에서 변수로 사용하고 싶습니다(이 경우에는 hostname실제로 다른 것이 필요합니다).

변수에 값을 할당할 때 항상 원격 값 대신 로컬 값을 얻습니다. 무엇이 문제일까요? 조언해주세요.

답변1

명령 대체

`hostname`

명령은 원격 서버에 전달되기 전에 여기의 (인용되지 않은) 문서에서 평가됩니다. 원격 서버에서 평가하려면 변수 대체를 피하는 것과 같은 방식으로 이스케이프해야 합니다.\${A}

ssh ip@host /bin/bash << EOF
hostname
A=\`hostname\`
echo \${A}
EOF

또는 (더 나은 방법은 더 이상 사용되지 않는 역따옴표 형식의 명령 대체를 바꾸는 것입니다)

ssh ip@host /bin/bash << EOF
hostname
A=\$(hostname)
echo \${A}
EOF

또는 (바람직하게는-당신이 원하지 않는 것 같기 때문에어느기본 확장), heredoc 자체를 인용합니다.

ssh ip@host /bin/bash << 'EOF'
hostname
A=$(hostname)
echo ${A}
EOF

답변2

당신은 이것을 찾고 있습니다.

hn=$(ssh 사용자 이름@domain "호스트 이름");echo "호스트 이름: $hn"

호스트 이름은 다음과 같습니다: [원격 이름]

따옴표 안에 실행하려는 명령은 원격 서버의 명령을 실행합니다. 로컬 시스템에서 명령을 실행하면 됩니다. 이것이 당신이 원하는 일이라고 ssh에게 말해야 합니다.

그렇지 않은 경우 더 복잡한 명령을 보려면 다음을 참조하세요. https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-a-local-shell-script-on-a-remote-machine

머신 A가 Unix 기반 시스템인 경우 다음을 사용할 수 있습니다.

ssh root@MachineB 'bash -s' < local_script.sh

일반적으로 명령줄에 내용을 밀어넣는 것은 좋은 생각이 아닙니다. 일반적으로 논리가 포함되어 있고 출력을 더 쉽게 제어할 수 있는 로컬 스크립트를 실행하고 싶을 것입니다.

bash의 -s에 주목하세요.

또한 해당 응답의 주석(여기서는 반복하지 않음), 추가 한정자, 명령에 루트/sudo가 필요한지 여부 등을 기록해 두십시오.

여기에 질문할 때 질문에 대해 더 많은 세부정보를 제공할수록 귀하가 실제로 달성하려는 것이 무엇인지 추측해야 하는 사람들이 줄어듭니다. 당신이 말로 명확하게 말하지 않으면 당신이 무엇을 원하는지 아무도 알 수 없다는 것을 기억하십시오.

관련 정보