SSH를 통해 다른 스크립트에 명령을 전달하는 데 문제가 있습니다.

SSH를 통해 다른 스크립트에 명령을 전달하는 데 문제가 있습니다.

Mac OSX 시스템에서 Solaris 기반 시스템으로 SSH를 시도하고 몇 가지 명령을 전달하려고 합니다. 하지만 가장 좋은 방법이 확실하지 않고 온라인에서 찾은 다양한 방법을 사용하여 다양한 문제에 직면하고 있습니다. 지금 내가 해야 할 가장 가까운 일은 다음과 같습니다.

사기검사.sh

#!/bin/sh
#
SUPNODE="X.X.X.X"
ssh -i /Users/jessebutryn/.ssh/Jesse_id_rsa root@$SUPNODE < /Users/jessebutryn/Documents/scripts/incomplete/fraudcommands.sh

사기 command.sh

#!/bin/sh
#
source /root/toolbox/toolbox
jbutryn
fraud 1

이 명령을 수동으로 실행하면 출력은 다음과 같습니다.

joyentmac2252:~ jessebutryn$ ssh [email protected]
[root@sup-jpc-west1 ~]# source /root/toolbox/toolbox
Enter your JPC Headnode username: jbutryn
Toolbox - Version 4.4.6 - It's Wednesday, this must be Devon (20161116)
---- Recent Changes ----

Replaced sdc-ldap/ufds with OpenLDAP client
vm/vmi now shows Swap
Moved creds to environment
Added random element to disabler string
fraud() speed up
Added over() for PD overrides
Added RAM to vms_by_pkg / fraud
Added dates to cust()
Big speed up for cust_vms(). You are welcome.

------------------------
[root@sup-jpc-west1 ~]# fraud 1
2017-06-29|2017-06-30
DC      ALIAS         UUID                                  RAM    BILLING_ID                            OWNER                                 CREATED
sw_1    SRADB02PRJOY  f70b0642-020c-cd72-d644-e0453ccd0e56  65536  14bc8e86-d0f8-11e5-a148-b39af8e5cb7b  bc1e2a34-e6fd-c421-d362-aeccb09eb9a4  2017-06-30T20:29:36.853Z
...

그러나 스크립트를 실행하면 다음과 같은 출력이 제공됩니다.

joyentmac2252:~ jessebutryn$ ~/Documents/scripts/incomplete/fraudcheck.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
Toolbox - Version 4.4.6 - It's Wednesday, this must be Devon (20161116)
---- Recent Changes ----

Replaced sdc-ldap/ufds with OpenLDAP client
vm/vmi now shows Swap
Moved creds to environment
Added random element to disabler string
fraud() speed up
Added over() for PD overrides
Added RAM to vms_by_pkg / fraud
Added dates to cust()
Big speed up for cust_vms(). You are welcome.

------------------------
/root/toolbox/toolbox: line 1888: [: =: unary operator expected
2017-06-29|2017-06-30
DC  ALIAS  UUID  RAM  BILLING_ID  OWNER  CREATED

다음은 도구 상자 스크립트의 1888번째 줄입니다. 그 목적이 무엇인지는 모르겠지만 해당 사용자와 일치하지 않는다는 것은 알고 있습니다.

[root@sup-jpc-west1 ~]# sed '1888!d' sup-toolbox/toolbox
if [ $(who am i | /usr/bin/cut -d' ' -f 1) = "some_user" ]; then

다음을 포함하여 명령 전달을 위한 다양한 솔루션을 시도했습니다.

echo "jbutryn" | ssh -i ...

ssh -i ... "
jbutryn
fraud 1
"

echo치트 명령 스크립트 read에서 명령을 시도했습니다 . 나는이 모든 것에 대해 매우 새로운 것이므로 도움을 주시면 대단히 감사하겠습니다. 감사해요!

답변1

왼쪽 명령이 텍스트를 반환하지 않기 [: =: unary operator expected때문에 오류가 발생하므로 항상 해당 필드/변수/등을 입력해야 합니다. 따옴표로 묶었습니다. who am i$(who am i | ...)

그 이유는 who am i터미널에 대한 정보("수동으로" 실행하는 경우에만 표시됨)를 제공하므로 텍스트가 반환되지 않기 때문입니다. 불행하게도 ssh는 명령을 실행하는 경우(소위 비대화형 세션) "실제/전체" 터미널 세션을 시작하지 않습니다. 이를 eg ​​로 바꿔야 합니다 $USER. 이는 훨씬 더 효율적입니다(변수 액세스는 새 프로그램을 시작하는 것보다 훨씬 빠릅니다).

if [ "$USER" = "some_user" ]; then

해결 방법으로 를 사용하여 실행할 수 있습니다 ssh -t <script>. 그러면 의사 터미널이 할당되어 who am i다시 작동합니다.

관련 정보