接続されたリモートSSHホストからローカルコンピューターでコマンドを実行しますか?


13

SSH経由でリモートコンピューターに接続したとします。このリモートコンピューター上のプログラムから、ローカルコンピューター(接続イニシエーター)でコマンドを実行する必要があります。

これにより、2つのコンピューター間の既存の接続にリーチしてローカルコンピューターでコマンドを実行することは可能ですか?

ssh user@host-of-connecting-party <command>リモートコンピューターでコマンドを実行して、逆の接続を確立することを検討しました。しかし、これは自動化が難しく、ユーザーの介入が必要になります。私はそれを完全に自動化できるか、少なくとも接続ユーザーのユーザー/ホスト名を検出できることを望んでいました。


何をしたいかは明らかです。はっきりしないのは、「完全に自動化できるか、少なくとも接続ユーザーのユーザー/ホスト名を検出できることを望んでいた」という部分です。どういう意味ですか?
-hytromo

この場合、「自動化が難しく、ユーザーの介入が必要」は「セキュア」と同義です。リモートホストがそれに接続するクライアントでコマンドを実行できた場合、それは非常に安全ではありません...サーバーが危険にさらされ、それに接続する誰もがローカルマシンに感染することを想像してください...それは楽しいでしょう:)
セルゲイ

回答:


5

Puttyを介してVPNサーバーに接続し、そこからsshを介して他のホストに接続する限り、VPNのセットアップが原因で直接到達できない場合もあります。

「ssh-session」を実行したまま、VPNサーバーマシンで何かをすばやく確認する必要がある場合があります。1つのアプローチは、sshセッションをで実行するscreenことです。これは、気づいたように、「通常のssh」と比較して遅延を追加します。ここで共有したい別のアプローチは次のとおりです。

SSHセッション中に、を押してEnterから~、(表示されていないことを確認します。つまり、コマンドモードになっていることを確認します)、次にCtrl-を押しますZ。これにより、sshクライアントプロセスがバックグラウンドの「ホスト」に配置され、次の行に沿って何かが行われます。

[root@client170 ~]# ~^Z [suspend ssh]

[1]+  Stopped                 ssh root@10.0.0.167
[root@vps291736 ~]#

今、あなたは「ホスト」にいて、あなたがやりたいことを何でもすることができます(しかし、sshセッションがどれだけ長く生き続けるかはわかりません)、そしてを実行してSSHセッションに戻りfgます。

少なくとも、CentOSベースのVM上のPuttyを介してWin10ワークステーションから接続し、そのVMからSSHを介して他のホストに接続している間、これは機能します。

それが誰かを助けることを願っています!


2
あなたが持っている場合はPermitLocalCommand yes、あなたの中.ssh/configのホストのために、あなたも行うことができ<Enter>~C、その後、!<command>
ムル

5

@ 62mkvの答えは、はるかに優れたソリューションです。それを使用します。

ただし、完全性と好奇心のために、ローカルマシンでsshサーバーを実行している場合は、sshトンネルを作成して、ポート20202のリモートホストからポート22のローカルホストへのssh接続を許可できます。

ssh -R20202:localhost:22 remoteuser@remotehost.com

これによりssh接続が開始されますが、マシンで実行されているsshサーバーへのトンネルも設定されます。次に、リモートホストにsshされたときにこれを行うことができます。

ssh -p 20202 localuser@localhost

もちろん、これはすぐに混乱する可能性があります-特にテクニックが複数回ネストされている場合。ローカルマシンで実行するすべてがリモートホストを介してバウンスされるため、遅延も少し増えます。

好奇心がまだ満たされていない人のためのsshトンネリングに関する追加情報は、このunix stackexchangeの質問への回答にあります。


これは素晴らしい答えです。ファイアウォールの背後にあり、teamniewerからのみアクセス可能なリモートマシンに対してsshを実行できるようにするために必要なもの。私は単にteamviewerを介して接続し、teamviewerセッションからマシンに戻ってsshトンネルを作成し、必要なだけコンピューターからリモートにsshセッションを開くことができました。
マリアン

実際、この@Marianのようなトンネルでは、これがはるかに優れたユースケースです。私はこれを自分で行います。
starbeamrainbowlabs

0

ローカルコンピューターとリモートコンピューターの両方にインターネットからアクセスできる場合、リモートコンピューター上のローカルコンピューターからSSHセッションを開き、そのセッションでローカルコンピューター上のリモートコンピューターから別のsshセッションを開くことができます。

localuser@local> ssh remoteuser@remote
Password:
remoteuser@remote> hostname
remote
remoteuser@remote> ssh localuser@local
Password:
localuser@local> hostname
local
localuser@local> exit
remoteuser@remote> exit
localuser@local>

ものを自動化するには、Fabric(Pythonの知識が必要)をご覧ください。

from fabric.api import *

@hosts('host1')
def clean_and_upload():
    local('find assets/ -name "*.DS_Store" -exec rm '{}' \;')
    local('tar czf /tmp/assets.tgz assets/')
    put('/tmp/assets.tgz', '/tmp/assets.tgz')
    with cd('/var/www/myapp/'):
        run('tar xzf /tmp/assets.tgz')

0

あなたは使用することができますsshpassをリモートコンピュータに接続し、コマンドを実行します。

./sshpass -p "password" ssh user@remoteIP 'bash -s < EOI "Your Commands go here" EOI'

ローカルコンピューターで単純なシェルスクリプトを使用し、リモートコンピューターでコマンドを実行する場合は常に上記のコードを使用します。これは、自動化で一般的に使用される方法の1つです。


0

いいえ、既存のセッションに侵入することはできません。

アプリケーションには、クライアントに接続し直す方法が必要です。クライアントでSSHサーバーが実行されており、サーバーがクライアントのポート22に到達できる場合、SSHは機能します。パスワード認証の代わりにキーベースの認証を使用した場合、自動化するのは難しくありません。この方法では、ユーザーの介入は不要です。

キーベースの認証の設定に関する情報は、ここで見つけることができます:http : //tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/


0

別の端末にアクセスできる場合は、接続を開始したsshコマンドに「kill -19 PID」を使用してSIGSTOPを送信できます。その後、クライアントマシンのターミナルでターミナルの制御を取得します。終了したら、fgと入力してsshクライアントを起動するだけで、ssh接続を復元できます。

しかし、もちろんここでの質問は次のとおりです。すでにクライアントマシンに端末がある場合、なぜこれを行うのでしょうか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.