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
再び動作します。