Ubuntuローカルシェルスクリプトsshでリモートサーバーに接続し、コマンドを実行します(インタープリターを期待します)

プロジェクトのシナリオ:

仕事では、ローカルでノードをサブミットし、他のノードにリモートでログインしてシェル コマンドを実行する必要がよくありますが、各リモート ホストに個別に ssh 接続すると、それぞれのコマンドを実行するのが非常に面倒になります。各リモートホストに直接 ssh 接続してサブミッションノード上でコマンドを実行できれば、いちいちログインする手間が省けます。

機能を実現します。

ssh パスワード不要のログインを設定する必要があります。ログイン パスワードをスキップして、リモート ホストに直接ログインできます。これは、シェル スクリプトで実行する場合に非常に重要です。

操作脚本:

次の内容の新しいシェル スクリプトを作成します。
#!/bin/expect

#设置变量
set user "holden"
set host "192.168.0.80"
set loginpass "123456"
set cmd_prompt "]#|~]?"

spawn ssh $user@$host
#设置超时时间,单位是秒
set timeout 30
# -re 匹配正则表达式
expect {
    
    
	-re "Are you sure you want to continue connecting (yes/no)?" {
    
    
		send "yes\r"
		} 
	-re "password:" {
    
    
		send "${loginpass}\r"
		} 
	-re "Permission denied, please try again." {
    
    
		exit
		}

}

###远程命令
expect {
    
     
	-re $cmd_prompt {
    
    
		send "./robosense_sdk.sh\r"
		send "exit \r"
	}

}

interact

走る:

ファイル名は start.sh、run です。
expect start.sh

おすすめ

転載: blog.csdn.net/m0_54792870/article/details/113108695