인수를 사용하여 ssh를 통해 원격 명령을 실행하는 방법은 무엇입니까?
내에서는 .bashrc
나중에 명령줄에서 사용할 수 있는 함수를 정의합니다.
function mycommand() {
ssh user@123.456.789.0 cd testdir;./test.sh "$1"
}
이 명령을 사용할 때 명령만 cd
원격 호스트에서 실행됩니다. test.sh
명령은 로컬 호스트에서 실행됩니다. 이는 세미콜론이 두 개의 다른 명령인 ssh
명령과 명령을 구분하기 때문 test.sh
입니다.
다음과 같이 함수를 정의하려고 시도했습니다(작은 따옴표 참고).
function mycommand() {
ssh user@123.456.789.0 'cd testdir;./test.sh "$1"'
}
cd
명령과 test.sh
명령을 함께 유지하려고 했지만 함수 $1
에 부여한 내용과 관계없이 인수 가 해결되지 않았습니다. 항상 명령을 실행하려고 시도합니다.
./test.sh $1
원격 호스트에서.
어떻게 제대로 정의합니까 mycommand
스크립트가 있도록 test.sh
디렉토리로 변경 한 후 원격 호스트에서 실행되는 testdir
주어진 인수에 전달할 수있는 능력, mycommand
에 test.sh
?
대신 다음과 같이 하십시오.
function mycommand {
ssh user@123.456.789.0 "cd testdir;./test.sh \"$1\""
}
여전히 전체 명령을 단일 문자열로 전달해야 하지만 해당 단일 문자열 $1
에서 ssh로 전송되기 전에 확장해야 하므로 이를 사용해야 ""
합니다.
업데이트
실제로 이를 수행하는 또 다른 적절한 방법 printf %q
은 인수를 적절하게 인용하는 데 사용 하는 것입니다. 이렇게 하면 공백, 작은따옴표, 큰따옴표 또는 쉘에 특별한 의미를 가질 수 있는 다른 문자가 있는 경우에도 인수를 구문 분석하는 것이 안전합니다.
function mycommand {
printf -v __ %q "$1"
ssh user@123.456.789.0 "cd testdir;./test.sh $__"
}
- 로 함수를 선언 할 때
function
,()
필요하지 않습니다. - 당신이 POSIXist이기 때문에 그것에 대해 다시 언급하지 마십시오.
오래된 스레드를 되살리지만이 꽤 깨끗한 접근 방식은 나열되지 않았습니다.
function mycommand() {
ssh user@123.456.789.0 <<+
cd testdir;./test.sh "$1"
+
}
이것은 AWS 클라우드에서 작동하는 예입니다. 시나리오는 자동 크기 조정에서 부팅된 일부 시스템이 SSH를 통해 새로 생성된 인스턴스 DNS를 전달하여 다른 서버에서 일부 작업을 수행해야 한다는 것입니다.
# Get the public DNS of the current machine (AWS specific)
MY_DNS=`curl -s http://169.254.169.254/latest/meta-data/public-hostname`
ssh \
-o StrictHostKeyChecking=no \
-i ~/.ssh/id_rsa \
user@remotehost.example.com \
<< EOF
cd ~/
echo "Hey I was just SSHed by ${MY_DNS}"
run_other_commands
# Newline is important before final EOF!
EOF
로컬 컴퓨터에서 원격으로 명령을 실행하기 위해 다음을 사용하고 있습니다.
ssh -i ~/.ssh/$GIT_PRIVKEY user@$IP "bash -s" < localpath/script.sh $arg1 $arg2
ReferenceURL : https://stackoverflow.com/questions/18502945/how-to-execute-a-remote-command-over-ssh-with-arguments
'IT이야기' 카테고리의 다른 글
Windows 시스템에서 iOS Safari Web Inspector에 액세스 (0) | 2021.10.08 |
---|---|
디버그를 위해 SoapClient 요청을 덤프하는 방법 (0) | 2021.10.08 |
Java 8의 새로운 java.util.Arrays 메소드가 모든 기본 유형에 대해 오버로드되지 않는 이유 (0) | 2021.10.07 |
Spring과 Spring MVC 프레임워크의 차이점 (0) | 2021.10.07 |
Spring Boot: 뚱뚱한 항아리가 있는 임의의 디렉토리에서 외부 application.properties 파일을 사용 (0) | 2021.10.07 |