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
다시 작동합니다.