SSHを介して他のスクリプトを参照するシェルスクリプトの実行

SSHを介して他のスクリプトを参照するシェルスクリプトの実行

2つのbashスクリプトがあり、main.sh1つはutil.shutils.sh今SSHを介して実行したいと思います。明らかにこれはうまくいきません。main.sh. util.shmain.sh

SSHユーザー@ホスト "bash /dev/stdin < main.sh"

リモートシェルが見つからないため、リモートシステムにコピーせずにutil.shどうすればよいですか?util.sh

答え1

util.sh展開する方がより良い信頼性の高いソリューションだと思いますが、次のことを行うことhostができます。main.sh

#!/bin/bash

U=$(mktemp)
cat > "$U"
. "$U"
rm -f "$U"
# rest of script

その後実行

ssh user@host main.sh < util.sh

セキュリティを強化するには、main.sh書き込み/削除不可能、入力転送なしstdinなどの一時ファイルを処理するための追加のコーディングが必要になる場合があります。

答え2

これは醜いですが動作するはずです。

ssh user@host bash < <(sed 's/\. util\.sh/ {r util.sh; d}' main.sh)

これにより、utilスクリプトの内容がデフォルトスクリプトに含まれ、リモートホストで実行されているbashプロセスにリンクされます。二重引用符を削除しました。プロセスの交換は、両方のファイルがあるローカルコンピュータで実行する必要があります。

関連情報