Skip to main content

SSH の使用法

%Net.SSH パッケージは、SSH (Secure ShellOpens in a new tab) 通信のサポートを提供します。このトピックでは、このパッケージに含まれているクラスについて簡単に説明します。

Caution:

OpenSSL 3.0 では、プロバイダの新しい構想として、アルゴリズム実装のグループをパッケージ化する手法が導入されています。プロバイダの 1 つにレガシー・プロバイダがあります。OpenSSL でも InterSystems IRIS® データ・プラットフォームでも、既定ではレガシー・プロバイダはロードされません。

レガシー・プロバイダのアルゴリズムを使用しないことをお勧めします。このようなすべてのアルゴリズムは、OpenSSL のドキュメントOpens in a new tabを参照してください。インターシステムズでは、InterSystems IRIS とレガシー・アルゴリズムとの互換性を保証できません。

SSH セッションの作成

%Net.SSH.SessionOpens in a new tab は SSH セッションを表します。このクラスを使用するには、以下の手順を実行します。

  1. クラスのインスタンスを作成します。

  2. Connect() インスタンスのメソッドを使用して、サーバに接続します。

  3. AuthenticateWithKeyPair()AuthenticateWithUsername()、または AuthenticateWithKeyboardInteractive() を使用して自身をサーバに対して認証します。詳細は、%Net.SSH.SessionOpens in a new tab のクラス・リファレンスを参照してください。

  4. %Net.SSH.SessionOpens in a new tab のその他のメソッドを使用して、リモート・システムとの間での単一ファイルの SCP (Secure Copy) 操作の実行、リモート・コマンドの実行、TCP トラフィックのトンネル、または SFTP 操作の実行を行います。クラス・リファレンスの %Net.SSH.SessionOpens in a new tab を参照してください。

    例えば、OpenSFTP を使用して、SFTP 操作のセッションを使用します。このメソッドは、SFTP 操作に使用できる %Net.SSH.SFTPOpens in a new tab のインスタンスを参照で返します。次のセクションに示した用例を参照してください。

Important:
  • これらのクラスを使用できるサポート・プラットフォームの詳細は、%Net.SSH.SessionOpens in a new tab および %Net.SSH.SFTPOpens in a new tab のクラス・リファレンスを参照してください。

  • OpenSSL 3.0 を使用する SSH 接続では、暗号化アルゴリズムとして Blowfish も CAST もサポートしていません。そのような接続を確立しようとすると接続に失敗します。

OpenSSH と PEM でエンコードされたキー

認証を行うには、公開鍵と秘密鍵のペアと (秘密鍵の) パスフレーズを使用します。公開鍵は OpenSSH 形式でなければならず、秘密鍵は PEM でエンコードする必要があります。ここでは、正しい鍵を持っているかどうかの判断に役立つ、基本情報を提供します。

OpenSSH 形式は、以下の例のようになります (ただし、この形式はここに示す意図的な改行は含みません)。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfi2Vq+u0rtt2OC84pyrkq1k7WkrS+s76u3a
+2gdD43KQ2Z3vSUUfksymJjp11JBZEpOtBVIAy221UKdc7j7Qk6sUjZaK8LIy+bzDVwMyFWgVv
Qge7EjdWjrJLBRCDXYML6y1Y25XexThkTWSGyXzGNdr+wfIHYn/mIt0hfvrusauvT/9Wz8K2MG
Aj4BL7UQZpFJrlXzGmewe6++6cZDQQYi0aztwLK798oc9j0LsccdMpqWrjqoU1uANFhYIuUu/T4
7TEhT+e6M+KFYK5TR998eJTO25IjdN2Tgw0feXhQFF/nngbol0bA4auSPaZQsgokKK+E+Q/8UtBd
etEofuV user@hostname 

PEM でエンコードした秘密鍵には、ファイルの先頭に以下のようなヘッダがあります。

--{}{}BEGIN RSA PRIVATE KEY{}{}-- 

ファイルは、同様のフッタで終了します。

--{}{}END RSA PRIVATE KEY{}{}-- 

例 : SFTP 経由のファイルのリスト作成

次のメソッドは、SFTP を経由してサーバ上のファイルのリストを作成する方法を示しています。

Method SFTPDir(ftpserver, username, password) As %Status
{
    set ssh = ##class(%Net.SSH.Session).%New()
    set status = ssh.Connect(ftpserver)
    set status = ssh.AuthenticateWithUsername(username,password)
    //open an SFTP session and get that returned by reference
    set status = ssh.OpenSFTP(.sftp)
    //get a list of files
    set status = sftp.Dir(".",.files)
    set i=$ORDER(files(""))
    while i'="" {
        write $listget(files(i),1),!
        set i=$ORDER(files(i))
    }
    quit $$$OK
}

例 : キーボード・インタラクティブによる認証

以下のターミナル・セッションは AuthenticateWithKeyboardInteractive() の使用方法を示しています。

%SYS>set host="192.168.2.100"
%SYS>set lambda="(u,i,p,f,c)  quit $listbuild(c(""password""))"
%SYS>set context("password")="fountain"
%SYS>set sess=##class(%Net.SSH.Session).%New()
%SYS>s status=sess.Connect(host)
%SYS>set status=sess.AuthenticateWithKeyboardInteractive("root",lambda,.context)

例 : リモート・コマンドの実行

以下の例は Execute() の使用方法を示しています。

 // %Net.SSH.Session.Execute
 // Specify the initial SSH connection information
 Set host="192.168.2.37"
 Set username = "SSHUser"
 Set password = "SSHPassword"
 // Set up the initial SSH connection
 // localhost <--SSH--> 192.168.2.37
 Set sshSession = ##class(%Net.SSH.Session).%New()
 Set statusConnection = sshSession.Connect(host) 
 Set statusConnection = sshSession.AuthenticateWithUsername(username,password)
 // Specify the command to execute on the remote host
 Set command = "uname -a"
 // Execute the command over the SSH connection
 // tDevice is a pass-by-reference value to store the raw data passing through the connection
 Set statusConnection = sshSession.Execute(command,.tDevice)

例 : ポートの転送

以下の例は ForwardPort() の使用方法を示しています。

 // %Net.SSH.Session.ForwardPort
 // Specify the initial SSH connection information
 Set host="192.168.2.37" 
 Set username = "SSHUser"
 Set password = "SSHPassword"
 // Set up the initial SSH connection
 // localhost <--SSH--> 192.168.2.37
 Set sshSession = ##class(%Net.SSH.Session).%New()
 Set statusConnection = sshSession.Connect(host) 
 Set statusConnection = sshSession.AuthenticateWithUsername(username,password)
 // Specify the remote port forward information
 Set remotehost = "192.168.2.100"
 Set remoteport = 80
 // Forward traffic via the SSH connection to a remote host:port 
 // localhost <--SSH--> 192.168.2.37 --SSHPortFwd--> 192.168.2.100:80
 // tDevice is a pass-by-reference value to store the raw data passing through the connection
 Set statusConnection = sshSession.ForwardPort(remotehost,remoteport,.tDevice)
FeedbackOpens in a new tab