web-dev-qa-db-ja.com

sshが「bash:/ dev / fd / 63:No such file or directory」を取得してリモートコマンドを実行する

リモートサーバーに_/root/test.sh_があり、次の内容があります。

_#!/bin/bash
date
_

リモートサーバーで、次の出力を取得します。

_# ./test.sh
Fri Dec 18 07:41:10 EST 2015

# bash <(cat /root/test.sh)
Fri Dec 18 07:41:23 EST 2015
_

ただし、ローカルマシンから同じコマンドを実行しようとすると、次の結果が得られます。

_$ ssh root@remote_server /root/test.sh
Fri Dec 18 07:44:32 EST 2015

$ ssh root@remote_server bash <(cat /root/test.sh)
cat: /root/test.sh: No such file or directory
bash: /dev/fd/63: No such file or directory
_

では、最後の実行の問題は何ですか?このbash <(cat /root/test.sh)のようなスクリプトを実行するのはおかしいかもしれません。私がそれをした理由は、それが私の実際の状況を簡略化したバージョンだからです。私の本当のコードは、インターネットからBashスクリプトをダウンロードしてローカルで実行することです。さまざまなパラメーターで実行するマシンがたくさんあるので、ローカルコンピューターから実行しようとしています。

6
Qian Chen

このようなファイル記述子をsshを介して渡すことはできません。 <(...)構築は、システム上に仮想ファイルを作成し、リモートシステム上で実行する場合は意味がありません。

本当に使用したい場合は、引用符で囲みます。bashがある場合は、リモートシステムで評価されます。

ssh root@remote_Host "bash <( cat /root/test.sh )"
13
Jakuje

私の提案は、リモートホスト(/root/test.sh)実行可能にします(chmod u+x /root/test.sh)そして次のように実行します

ssh root@remote_server /bin/bash -c  /root/test.sh

/bin/bash: /dev/fd/63: No such file or directory
この回答の理由を読むことができます [ 1 ]

注意:
フルパス(/bin/bash)コマンド名(bash)だけではなく、不要なセキュリティリスクを回避する [ 2 ]


別の方法は

ssh root@remote_server << EOF
cat  /root/test.sh
# whatever else
EOF

それは2番目のEOFまで各行を実行します...あなたはそれについてあなたのバリアントを行うことができます...

4
Hastur