SSH 연결을 통해 명령 실행

SSH 연결을 통해 명령 실행

SSH 연결을 통해 다음 명령을 실행하고 싶습니다.

tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) && top -b -U jboss -n 1 |grep $tmpValue |awk '{print $9}' 

명령이 내 대상 컴퓨터에서 실행 중입니다.

이제 다른 컴퓨터에서 이 명령을 사용하고 ssh를 통해 실행하고 싶습니다. 그래서 제가 한 일은 다음과 같습니다.

ssh jboss@myTargetServer tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) && top -b -U jboss -n 1 |grep $tmpValue |awk '{print $9}' 

밝혀지다

 cat: /var/run/jboss-as/jboss-as-standalone8.pid: No such file or directory
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

내 전화기에 문제가 있는 걸까요?

답변1

쉘에서 더 적은 특수 문자가 나타날 수 있도록 명령을 단순화하는 것이 더 쉬울 수 있습니다.

ssh jboss@myTargetServer 'ps -p $(cat /var/run/jboss-as/jboss-as-standalone8.pid) -o %cpu= 2>/dev/null'

2>/dev/nullPID 파일을 찾을 수 없거나 오래된 PID가 포함된 경우 후행 오류 텍스트가 삭제됩니다.

답변2

이 명령을 사용할 수 있도록 따옴표로 묶는 것이 좋습니다 ssh. 그렇지 않으면 명령줄의 전체 "원격" 부분을 따옴표로 묶고 거기에 있는 모든 항목을 적절하게 이스케이프 처리해야 합니다. 이는 지루하고 오류가 발생하기 쉬울 수 있습니다. 이것이 바로 원격 스크립트 호출의 목적입니다.

답변3

$()두 번째 명령은 로컬 하위 셸에서 코드 부분( )을 실행합니다. 특수 문자(기본적으로)를 이스케이프 처리하여 $반대편에서도 작동하도록 해야 합니다.

ssh jboss@myTargetServer tmpValue=\$(cat /var/run/jboss-as/jboss-as-standalone8.pid) \
 && top -b -U jboss -n 1 |grep \$tmpValue |awk '{print $9}'

또는 모든 것을 아포스트로피 안에 넣고 '내부 항목을 피하십시오.

ssh jboss@myTargetServer 'tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) \
 && top -b -U jboss -n 1 |grep \$tmpValue |awk \'{print $9}\''

테스트하지는 않았지만 문제를 해결하기 위해 수행해야 할 작업에 대한 기본 아이디어는 다음과 같습니다.

답변4

스크립트 작성을 정말로 꺼리는 경우 다음을 찾을 수 있습니다. 여기 문서편리한. 즉, << SOMETEXMARKER줄 끝에 추가하고 원격 호스트에 대한 명령을 원하는 만큼 계속 입력할 수 있습니다. 그런 다음 마지막 줄(줄의 맨 처음)에 동일한 내용을 입력하면 SOMETEXTMARKER입력된 명령이 원격으로 실행됩니다.

여기에 예가 있습니다.

[bobby@bobby ~]$ ssh jimmy@jimmy << MRK '
> # single quote above makes all vars resolve on remote host
> echo remote user and host are : 
> echo $USER $(hostname)
> # entereing closing single quote
> '
> # finally entereing the marker
> MRK
remote user and host are :
jimmy jimmy

관련 정보