2016-07-25 6 views
2

bashのリモートシステムにsshを実行しているときに、ローカルシステム上でコマンドを実行したい。これを行う方法はありますか?bashのssh上でローカルマシン上でコマンドを実行する

#!/bin/bash 

ssh [email protected] <<'SSH' 
#Do something 
#Run a command here on local machine and not on machine I have sshed to 
#Do Something 

exit 
SSH 

編集:メッセージをエコーし​​たいと思います。エコーコマンドの出力がリモートマシンから表示されないので、ローカルから実行したいです。

+2

あなたは地元に滞在し、リモートにコマンドを送信することができます – stzahi

+3

*実際に何をしようとしていますか?この質問に答えていくうちに、何かを進めることができるかもしれませんが、これは[XY問題](http://mywiki.wooledge.org/XyProblem)のように疑わしいと思います。より多くの情報を提供すれば、それをより良い方法で解決することができます。 – ghoti

+0

私は何をしたいの詳細を追加しました –

答えて

2

スクリプトを変更することができる場合、あなたはそのために期待するスクリプトを使用することができます - expect_example_and_tips

これはまだ上で実行中に、リモートマシンにコマンドを送信できる「sshのプロセス」を開始することができますがローカルマシン。

#!/usr/bin/env python 

import pexpect 

PROMPT = "\$|\%|\>" 
ssh_cmd = "ssh [email protected]" 

try: 
    ssh = pexpect.spawn(ssh_cmd) 
    ssh.sendline("echo hello on remote") 
    ssh.expect(PROMPT) 
    print "hello on local machine" 
    ssh.close() 

except Exception as e: 
    print e 
    sys.exit(2) 
+0

リモートコマンドを実行中に何かをエコーし​​たかっただけです。 –

+0

私は示唆したように、リモートコマンドを実行することを期待し、あなたがローカルマシン上にあるので、あなたが望むようにエコーすることができます。私はこれを回避するための別の方法を知らないのではないかと思います.pexpectモジュールを使ってPythonでBashで同じことをやってみました。 – tomereli

+0

あなたの答えは「あなたはこの他のツールを使うことができます。ここにはリンクがありますが、私はこれを使うのではなく、あなたが尋ねていることを使うことはありません。 "?ええと...あなたの答えを改善したいですか? – ghoti

5

あなたはSSHを使用している、キーシーケンス<enter>~あなたはSSHを一時停止し、SSHクライアントにキーシーケンスを送信することができますエスケープ接頭辞である:例 - しかし、私の意見では

Pythonではるかに簡単にホスト側で シーケンス<enter>~<ctrl + z>はsshクライアントジョブを一時停止(停止)し、呼び出し元システムのプロンプトに移動します。 fg(ouがUnixシェル上にある場合)を入力すると、後でsshセッションが再開されます。

他のsshエスケープシーケンスは、<enter>~?と入力すると表示されます。 シーケンス<enter>~.は接続を終了し、セッションがリモートマシンでロックされている場合に非常に便利です。

これらの配列はときから有用である(アクセントとdigramsを構成するために、デッドキーとして~を使用する非米国キーボードレイアウトを持つユーザーが持っている、明らかに、これらの配列の全てに二回~を入力します) SSHセッションを操作していますが、スクリプトではなく、自分でコマンドを入力してください。

スクリプトでこれを行う方法が必要なように思えるので、直接ホストにsshコマンドを戻すことが簡単な解決方法です。

+0

私は基本的に自動化されたスクリプトで何かをエコーし​​たかったのです。エコーはリモートマシンでは実行されません –

+0

- これらのシーケンスは、スクリプトではなく、端末で「ライブ」しているときのシーケンスです。 – jsbueno

関連する問題