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

おすすめ記事