mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Issue #401: Extend SSH tunnel options: Allow user to set SHH host/ip and port, and a private key file used for authentication. If SSH host is not set, use what the user specified as MySQL server host.
This commit is contained in:
@ -275,7 +275,7 @@ object connform: Tconnform
|
|||||||
Height = 21
|
Height = 21
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
OnChange = Modification
|
OnChange = editHostChange
|
||||||
end
|
end
|
||||||
object comboNetType: TComboBox
|
object comboNetType: TComboBox
|
||||||
Left = 101
|
Left = 101
|
||||||
@ -300,28 +300,28 @@ object connform: Tconnform
|
|||||||
DesignSize = (
|
DesignSize = (
|
||||||
301
|
301
|
||||||
197)
|
197)
|
||||||
object lblSSHPort: TLabel
|
object lblSSHLocalPort: TLabel
|
||||||
Left = 3
|
Left = 3
|
||||||
Top = 39
|
Top = 163
|
||||||
Width = 51
|
Width = 51
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Local port:'
|
Caption = 'Local port:'
|
||||||
FocusControl = editSSHPort
|
FocusControl = editSSHlocalport
|
||||||
end
|
end
|
||||||
object lblSSHUser: TLabel
|
object lblSSHUser: TLabel
|
||||||
Left = 3
|
Left = 3
|
||||||
Top = 66
|
Top = 82
|
||||||
Width = 76
|
Width = 52
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Shell username:'
|
Caption = 'Username:'
|
||||||
FocusControl = editSSHUser
|
FocusControl = editSSHUser
|
||||||
end
|
end
|
||||||
object lblSSHPassword: TLabel
|
object lblSSHPassword: TLabel
|
||||||
Left = 3
|
Left = 3
|
||||||
Top = 93
|
Top = 109
|
||||||
Width = 75
|
Width = 50
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Shell password:'
|
Caption = 'Password:'
|
||||||
FocusControl = editSSHPassword
|
FocusControl = editSSHPassword
|
||||||
end
|
end
|
||||||
object lblSSHPlinkExe: TLabel
|
object lblSSHPlinkExe: TLabel
|
||||||
@ -331,35 +331,67 @@ object connform: Tconnform
|
|||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'plink.exe location:'
|
Caption = 'plink.exe location:'
|
||||||
end
|
end
|
||||||
object editSSHPort: TEdit
|
object lblSSHhost: TLabel
|
||||||
|
Left = 3
|
||||||
|
Top = 55
|
||||||
|
Width = 81
|
||||||
|
Height = 13
|
||||||
|
Caption = 'SSH host + port:'
|
||||||
|
FocusControl = editSSHhost
|
||||||
|
end
|
||||||
|
object lblSSHkeyfile: TLabel
|
||||||
|
Left = 3
|
||||||
|
Top = 136
|
||||||
|
Width = 75
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Private key file:'
|
||||||
|
FocusControl = editSSHPrivateKey
|
||||||
|
end
|
||||||
|
object lblDownloadPlink: TLabel
|
||||||
Left = 101
|
Left = 101
|
||||||
Top = 36
|
Top = 33
|
||||||
|
Width = 93
|
||||||
|
Height = 13
|
||||||
|
Cursor = crHandPoint
|
||||||
|
Hint = 'http://putty.very.rulez.org/latest/x86/plink.exe'
|
||||||
|
Caption = 'Download plink.exe'
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clBlue
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsUnderline]
|
||||||
|
ParentFont = False
|
||||||
|
OnClick = lblDownloadPlinkClick
|
||||||
|
end
|
||||||
|
object editSSHlocalport: TEdit
|
||||||
|
Left = 101
|
||||||
|
Top = 160
|
||||||
Width = 188
|
Width = 188
|
||||||
Height = 21
|
Height = 21
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
NumbersOnly = True
|
NumbersOnly = True
|
||||||
TabOrder = 0
|
TabOrder = 6
|
||||||
Text = 'editSSHPort'
|
Text = 'editSSHlocalport'
|
||||||
OnChange = Modification
|
OnChange = Modification
|
||||||
end
|
end
|
||||||
object editSSHUser: TEdit
|
object editSSHUser: TEdit
|
||||||
Left = 101
|
Left = 101
|
||||||
Top = 63
|
Top = 79
|
||||||
Width = 188
|
Width = 188
|
||||||
Height = 21
|
Height = 21
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
TabOrder = 1
|
TabOrder = 3
|
||||||
Text = 'editSSHUser'
|
Text = 'editSSHUser'
|
||||||
OnChange = Modification
|
OnChange = Modification
|
||||||
end
|
end
|
||||||
object editSSHPassword: TEdit
|
object editSSHPassword: TEdit
|
||||||
Left = 101
|
Left = 101
|
||||||
Top = 90
|
Top = 106
|
||||||
Width = 188
|
Width = 188
|
||||||
Height = 21
|
Height = 21
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
PasswordChar = '*'
|
PasswordChar = '*'
|
||||||
TabOrder = 2
|
TabOrder = 4
|
||||||
Text = 'editSSHPassword'
|
Text = 'editSSHPassword'
|
||||||
OnChange = Modification
|
OnChange = Modification
|
||||||
end
|
end
|
||||||
@ -372,12 +404,48 @@ object connform: Tconnform
|
|||||||
Images = MainForm.ImageListMain
|
Images = MainForm.ImageListMain
|
||||||
RightButton.ImageIndex = 51
|
RightButton.ImageIndex = 51
|
||||||
RightButton.Visible = True
|
RightButton.Visible = True
|
||||||
TabOrder = 3
|
TabOrder = 0
|
||||||
Text = 'editSSHPlinkExe'
|
Text = 'editSSHPlinkExe'
|
||||||
OnChange = editSSHPlinkExeChange
|
OnChange = editSSHPlinkExeChange
|
||||||
OnDblClick = PickFile
|
OnDblClick = PickFile
|
||||||
OnRightButtonClick = PickFile
|
OnRightButtonClick = PickFile
|
||||||
end
|
end
|
||||||
|
object editSSHhost: TEdit
|
||||||
|
Left = 101
|
||||||
|
Top = 52
|
||||||
|
Width = 133
|
||||||
|
Height = 21
|
||||||
|
Anchors = [akLeft, akTop, akRight]
|
||||||
|
TabOrder = 1
|
||||||
|
Text = 'editSSHhost'
|
||||||
|
OnChange = Modification
|
||||||
|
end
|
||||||
|
object editSSHport: TEdit
|
||||||
|
Left = 240
|
||||||
|
Top = 52
|
||||||
|
Width = 49
|
||||||
|
Height = 21
|
||||||
|
Anchors = [akTop, akRight]
|
||||||
|
NumbersOnly = True
|
||||||
|
TabOrder = 2
|
||||||
|
Text = 'editSSHport'
|
||||||
|
OnChange = Modification
|
||||||
|
end
|
||||||
|
object editSSHPrivateKey: TButtonedEdit
|
||||||
|
Left = 101
|
||||||
|
Top = 133
|
||||||
|
Width = 188
|
||||||
|
Height = 21
|
||||||
|
Anchors = [akLeft, akTop, akRight]
|
||||||
|
Images = MainForm.ImageListMain
|
||||||
|
RightButton.ImageIndex = 51
|
||||||
|
RightButton.Visible = True
|
||||||
|
TabOrder = 5
|
||||||
|
Text = 'editSSHPrivateKey'
|
||||||
|
OnChange = Modification
|
||||||
|
OnDblClick = PickFile
|
||||||
|
OnRightButtonClick = PickFile
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object tabSSLOptions: TTabSheet
|
object tabSSLOptions: TTabSheet
|
||||||
Caption = 'SSL options'
|
Caption = 'SSL options'
|
||||||
|
@ -58,15 +58,21 @@ type
|
|||||||
lblCounterRight: TLabel;
|
lblCounterRight: TLabel;
|
||||||
lblLastConnectRight: TLabel;
|
lblLastConnectRight: TLabel;
|
||||||
tabSSHtunnel: TTabSheet;
|
tabSSHtunnel: TTabSheet;
|
||||||
editSSHPort: TEdit;
|
editSSHlocalport: TEdit;
|
||||||
editSSHUser: TEdit;
|
editSSHUser: TEdit;
|
||||||
editSSHPassword: TEdit;
|
editSSHPassword: TEdit;
|
||||||
lblSSHPort: TLabel;
|
lblSSHLocalPort: TLabel;
|
||||||
lblSSHUser: TLabel;
|
lblSSHUser: TLabel;
|
||||||
lblSSHPassword: TLabel;
|
lblSSHPassword: TLabel;
|
||||||
editSSHPlinkExe: TButtonedEdit;
|
editSSHPlinkExe: TButtonedEdit;
|
||||||
lblSSHPlinkExe: TLabel;
|
lblSSHPlinkExe: TLabel;
|
||||||
comboNetType: TComboBox;
|
comboNetType: TComboBox;
|
||||||
|
lblSSHhost: TLabel;
|
||||||
|
editSSHhost: TEdit;
|
||||||
|
editSSHport: TEdit;
|
||||||
|
editSSHPrivateKey: TButtonedEdit;
|
||||||
|
lblSSHkeyfile: TLabel;
|
||||||
|
lblDownloadPlink: TLabel;
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure btnOpenClick(Sender: TObject);
|
procedure btnOpenClick(Sender: TObject);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
@ -99,6 +105,8 @@ type
|
|||||||
procedure FormResize(Sender: TObject);
|
procedure FormResize(Sender: TObject);
|
||||||
procedure PickFile(Sender: TObject);
|
procedure PickFile(Sender: TObject);
|
||||||
procedure editSSHPlinkExeChange(Sender: TObject);
|
procedure editSSHPlinkExeChange(Sender: TObject);
|
||||||
|
procedure editHostChange(Sender: TObject);
|
||||||
|
procedure lblDownloadPlinkClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
{ Private declarations }
|
{ Private declarations }
|
||||||
FLoaded: Boolean;
|
FLoaded: Boolean;
|
||||||
@ -200,9 +208,12 @@ begin
|
|||||||
Params.Username := editUsername.Text;
|
Params.Username := editUsername.Text;
|
||||||
Params.Password := editPassword.Text;
|
Params.Password := editPassword.Text;
|
||||||
Params.Port := MakeInt(editPort.Text);
|
Params.Port := MakeInt(editPort.Text);
|
||||||
|
Params.SSHHost := editSSHHost.Text;
|
||||||
|
Params.SSHPort := MakeInt(editSSHPort.Text);
|
||||||
Params.SSHUser := editSSHuser.Text;
|
Params.SSHUser := editSSHuser.Text;
|
||||||
Params.SSHPassword := editSSHpassword.Text;
|
Params.SSHPassword := editSSHpassword.Text;
|
||||||
Params.SSHPort := MakeInt(editSSHport.Text);
|
Params.SSHPrivateKey := editSSHPrivateKey.Text;
|
||||||
|
Params.SSHLocalPort := MakeInt(editSSHlocalport.Text);
|
||||||
Params.SSHPlinkExe := editSSHplinkexe.Text;
|
Params.SSHPlinkExe := editSSHplinkexe.Text;
|
||||||
Params.SSLPrivateKey := editSSLPrivateKey.Text;
|
Params.SSLPrivateKey := editSSLPrivateKey.Text;
|
||||||
Params.SSLCertificate := editSSLCertificate.Text;
|
Params.SSLCertificate := editSSLCertificate.Text;
|
||||||
@ -232,9 +243,12 @@ begin
|
|||||||
MainReg.WriteInteger(REGNAME_NETTYPE, comboNetType.ItemIndex);
|
MainReg.WriteInteger(REGNAME_NETTYPE, comboNetType.ItemIndex);
|
||||||
MainReg.WriteBool(REGNAME_COMPRESSED, chkCompressed.Checked);
|
MainReg.WriteBool(REGNAME_COMPRESSED, chkCompressed.Checked);
|
||||||
MainReg.WriteString(REGNAME_STARTUPSCRIPT, editStartupScript.Text);
|
MainReg.WriteString(REGNAME_STARTUPSCRIPT, editStartupScript.Text);
|
||||||
MainReg.WriteInteger(REGNAME_SSHPORT, MakeInt(editSSHPort.Text));
|
MainReg.WriteString(REGNAME_SSHHOST, editSSHHost.Text);
|
||||||
|
MainReg.WriteInteger(REGNAME_SSHPORT, MakeInt(editSSHport.Text));
|
||||||
MainReg.WriteString(REGNAME_SSHUSER, editSSHUser.Text);
|
MainReg.WriteString(REGNAME_SSHUSER, editSSHUser.Text);
|
||||||
MainReg.WriteString(REGNAME_SSHPASSWORD, encrypt(editSSHPassword.Text));
|
MainReg.WriteString(REGNAME_SSHPASSWORD, encrypt(editSSHPassword.Text));
|
||||||
|
MainReg.WriteString(REGNAME_SSHKEY, editSSHPrivateKey.Text);
|
||||||
|
MainReg.WriteInteger(REGNAME_SSHLOCALPORT, MakeInt(editSSHlocalport.Text));
|
||||||
MainReg.WriteString(REGNAME_SSL_KEY, editSSLPrivateKey.Text);
|
MainReg.WriteString(REGNAME_SSL_KEY, editSSLPrivateKey.Text);
|
||||||
MainReg.WriteString(REGNAME_SSL_CERT, editSSLCertificate.Text);
|
MainReg.WriteString(REGNAME_SSL_CERT, editSSLCertificate.Text);
|
||||||
MainReg.WriteString(REGNAME_SSL_CA, editSSLCACertificate.Text);
|
MainReg.WriteString(REGNAME_SSL_CA, editSSLCACertificate.Text);
|
||||||
@ -415,9 +429,12 @@ begin
|
|||||||
chkCompressed.Checked := opCompress in FOrgParams.Options;
|
chkCompressed.Checked := opCompress in FOrgParams.Options;
|
||||||
editStartupScript.Text := FOrgParams.StartupScriptFilename;
|
editStartupScript.Text := FOrgParams.StartupScriptFilename;
|
||||||
editSSHPlinkExe.Text := FOrgParams.SSHPlinkExe;
|
editSSHPlinkExe.Text := FOrgParams.SSHPlinkExe;
|
||||||
editSSHPort.Text := IntToStr(FOrgParams.SSHPort);
|
editSSHHost.Text := FOrgParams.SSHHost;
|
||||||
|
editSSHport.Text := IntToStr(FOrgParams.SSHPort);
|
||||||
editSSHUser.Text := FOrgParams.SSHUser;
|
editSSHUser.Text := FOrgParams.SSHUser;
|
||||||
editSSHPassword.Text := FOrgParams.SSHPassword;
|
editSSHPassword.Text := FOrgParams.SSHPassword;
|
||||||
|
editSSHPrivateKey.Text := FOrgParams.SSHPrivateKey;
|
||||||
|
editSSHlocalport.Text := IntToStr(FOrgParams.SSHLocalPort);
|
||||||
editSSLPrivateKey.Text := FOrgParams.SSLPrivateKey;
|
editSSLPrivateKey.Text := FOrgParams.SSLPrivateKey;
|
||||||
editSSLCertificate.Text := FOrgParams.SSLCertificate;
|
editSSLCertificate.Text := FOrgParams.SSLCertificate;
|
||||||
editSSLCACertificate.Text := FOrgParams.SSLCACertificate;
|
editSSLCACertificate.Text := FOrgParams.SSLCACertificate;
|
||||||
@ -530,6 +547,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure Tconnform.editHostChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
editSSHhost.TextHint := TEdit(Sender).Text;
|
||||||
|
Modification(Sender);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure Tconnform.editPortChange(Sender: TObject);
|
procedure Tconnform.editPortChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
// Work around smallint values of TUpDown, allow integer values
|
// Work around smallint values of TUpDown, allow integer values
|
||||||
@ -551,7 +574,7 @@ begin
|
|||||||
or (FOrgParams.NetType <> TNetType(comboNetType.ItemIndex))
|
or (FOrgParams.NetType <> TNetType(comboNetType.ItemIndex))
|
||||||
or (FOrgParams.StartupScriptFilename <> editStartupScript.Text)
|
or (FOrgParams.StartupScriptFilename <> editStartupScript.Text)
|
||||||
or (FOrgParams.SSHPlinkExe <> editSSHPlinkExe.Text)
|
or (FOrgParams.SSHPlinkExe <> editSSHPlinkExe.Text)
|
||||||
or (IntToStr(FOrgParams.SSHPort) <> editSSHPort.Text)
|
or (IntToStr(FOrgParams.SSHLocalPort) <> editSSHlocalport.Text)
|
||||||
or (FOrgParams.SSHUser <> editSSHUser.Text)
|
or (FOrgParams.SSHUser <> editSSHUser.Text)
|
||||||
or (FOrgParams.SSHPassword <> editSSHPassword.Text)
|
or (FOrgParams.SSHPassword <> editSSHPassword.Text)
|
||||||
or (FOrgParams.SSLPrivateKey <> editSSLPrivateKey.Text)
|
or (FOrgParams.SSLPrivateKey <> editSSLPrivateKey.Text)
|
||||||
@ -692,4 +715,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure Tconnform.lblDownloadPlinkClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ShellExec(TLabel(Sender).Hint);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -123,9 +123,13 @@ const
|
|||||||
REGNAME_PORT = 'Port';
|
REGNAME_PORT = 'Port';
|
||||||
DEFAULT_PORT = 3306;
|
DEFAULT_PORT = 3306;
|
||||||
REGNAME_PLINKEXE = 'PlinkExecutable';
|
REGNAME_PLINKEXE = 'PlinkExecutable';
|
||||||
REGNAME_SSHPORT = 'SSHtunnelPort';
|
REGNAME_SSHHOST = 'SSHtunnelHost';
|
||||||
|
REGNAME_SSHPORT = 'SSHtunnelHostPort';
|
||||||
|
DEFAULT_SSHPORT = 22;
|
||||||
|
REGNAME_SSHLOCALPORT = 'SSHtunnelPort';
|
||||||
REGNAME_SSHUSER = 'SSHtunnelUser';
|
REGNAME_SSHUSER = 'SSHtunnelUser';
|
||||||
REGNAME_SSHPASSWORD = 'SSHtunnelPassword';
|
REGNAME_SSHPASSWORD = 'SSHtunnelPassword';
|
||||||
|
REGNAME_SSHKEY = 'SSHtunnelPrivateKey';
|
||||||
REGNAME_SSL_KEY = 'SSL_Key';
|
REGNAME_SSL_KEY = 'SSL_Key';
|
||||||
REGNAME_SSL_CERT = 'SSL_Cert';
|
REGNAME_SSL_CERT = 'SSL_Cert';
|
||||||
REGNAME_SSL_CA = 'SSL_CA';
|
REGNAME_SSL_CA = 'SSL_CA';
|
||||||
|
@ -3608,9 +3608,12 @@ begin
|
|||||||
Result.Username := GetRegValue(REGNAME_USER, '', Session);
|
Result.Username := GetRegValue(REGNAME_USER, '', Session);
|
||||||
Result.Password := decrypt(GetRegValue(REGNAME_PASSWORD, '', Session));
|
Result.Password := decrypt(GetRegValue(REGNAME_PASSWORD, '', Session));
|
||||||
Result.Port := StrToIntDef(GetRegValue(REGNAME_PORT, '', Session), DEFAULT_PORT);
|
Result.Port := StrToIntDef(GetRegValue(REGNAME_PORT, '', Session), DEFAULT_PORT);
|
||||||
|
Result.SSHHost := GetRegValue(REGNAME_SSHHOST, '', Session);
|
||||||
|
Result.SSHPort := GetRegValue(REGNAME_SSHPORT, DEFAULT_SSHPORT, Session);
|
||||||
Result.SSHUser := GetRegValue(REGNAME_SSHUSER, '', Session);
|
Result.SSHUser := GetRegValue(REGNAME_SSHUSER, '', Session);
|
||||||
Result.SSHPassword := decrypt(GetRegValue(REGNAME_SSHPASSWORD, '', Session));
|
Result.SSHPassword := decrypt(GetRegValue(REGNAME_SSHPASSWORD, '', Session));
|
||||||
Result.SSHPort := GetRegValue(REGNAME_SSHPORT, 0, Session);
|
Result.SSHPrivateKey := GetRegValue(REGNAME_SSHKEY, '', Session);
|
||||||
|
Result.SSHLocalPort := GetRegValue(REGNAME_SSHLOCALPORT, 0, Session);
|
||||||
Result.SSHPlinkExe := GetRegValue(REGNAME_PLINKEXE, '');
|
Result.SSHPlinkExe := GetRegValue(REGNAME_PLINKEXE, '');
|
||||||
Result.SSLPrivateKey := GetRegValue(REGNAME_SSL_KEY, '', Session);
|
Result.SSLPrivateKey := GetRegValue(REGNAME_SSL_KEY, '', Session);
|
||||||
Result.SSLCertificate := GetRegValue(REGNAME_SSL_CERT, '', Session);
|
Result.SSLCertificate := GetRegValue(REGNAME_SSL_CERT, '', Session);
|
||||||
|
@ -58,8 +58,8 @@ type
|
|||||||
FNetType: TNetType;
|
FNetType: TNetType;
|
||||||
FHostname, FUsername, FPassword, FStartupScriptFilename,
|
FHostname, FUsername, FPassword, FStartupScriptFilename,
|
||||||
FSSLPrivateKey, FSSLCertificate, FSSLCACertificate,
|
FSSLPrivateKey, FSSLCertificate, FSSLCACertificate,
|
||||||
FSSHUser, FSSHPassword, FSSHPlinkExe: String;
|
FSSHHost, FSSHUser, FSSHPassword, FSSHPlinkExe, FSSHPrivateKey: String;
|
||||||
FPort, FSSHPort: Integer;
|
FPort, FSSHPort, FSSHLocalPort: Integer;
|
||||||
FOptions: TMySQLClientOptions;
|
FOptions: TMySQLClientOptions;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
@ -71,9 +71,12 @@ type
|
|||||||
property Password: String read FPassword write FPassword;
|
property Password: String read FPassword write FPassword;
|
||||||
property StartupScriptFilename: String read FStartupScriptFilename write FStartupScriptFilename;
|
property StartupScriptFilename: String read FStartupScriptFilename write FStartupScriptFilename;
|
||||||
property Options: TMySQLClientOptions read FOptions write FOptions;
|
property Options: TMySQLClientOptions read FOptions write FOptions;
|
||||||
|
property SSHHost: String read FSSHHost write FSSHHost;
|
||||||
|
property SSHPort: Integer read FSSHPort write FSSHPort;
|
||||||
property SSHUser: String read FSSHUser write FSSHUser;
|
property SSHUser: String read FSSHUser write FSSHUser;
|
||||||
property SSHPassword: String read FSSHPassword write FSSHPassword;
|
property SSHPassword: String read FSSHPassword write FSSHPassword;
|
||||||
property SSHPort: Integer read FSSHPort write FSSHPort;
|
property SSHPrivateKey: String read FSSHPrivateKey write FSSHPrivateKey;
|
||||||
|
property SSHLocalPort: Integer read FSSHLocalPort write FSSHLocalPort;
|
||||||
property SSHPlinkExe: String read FSSHPlinkExe write FSSHPlinkExe;
|
property SSHPlinkExe: String read FSSHPlinkExe write FSSHPlinkExe;
|
||||||
property SSLPrivateKey: String read FSSLPrivateKey write FSSLPrivateKey;
|
property SSLPrivateKey: String read FSSLPrivateKey write FSSLPrivateKey;
|
||||||
property SSLCertificate: String read FSSLCertificate write FSSLCertificate;
|
property SSLCertificate: String read FSSLCertificate write FSSLCertificate;
|
||||||
@ -243,6 +246,8 @@ begin
|
|||||||
FUsername := DEFAULT_USER;
|
FUsername := DEFAULT_USER;
|
||||||
FPassword := '';
|
FPassword := '';
|
||||||
FPort := DEFAULT_PORT;
|
FPort := DEFAULT_PORT;
|
||||||
|
FSSHPort := DEFAULT_SSHPORT;
|
||||||
|
FSSHLocalPort := FPort + 1;
|
||||||
FSSLPrivateKey := '';
|
FSSLPrivateKey := '';
|
||||||
FSSLCertificate := '';
|
FSSLCertificate := '';
|
||||||
FSSLCACertificate := '';
|
FSSLCACertificate := '';
|
||||||
@ -334,11 +339,23 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
ntSSHtunnel: begin
|
ntSSHtunnel: begin
|
||||||
// Call plink.exe
|
// Build plink.exe command line
|
||||||
// plink bob@domain.com -pw myPassw0rd1 -L 55555:localhost:3306
|
// plink bob@domain.com -pw myPassw0rd1 -P 22 -i "keyfile.pem" -L 55555:localhost:3306
|
||||||
PlinkCmd := FParameters.SSHPlinkExe + ' ' + FParameters.SSHUser + '@' + FParameters.Hostname +
|
PlinkCmd := FParameters.SSHPlinkExe + ' ';
|
||||||
' -pw ' + FParameters.SSHPassword +
|
if FParameters.SSHUser <> '' then
|
||||||
' -L ' + IntToStr(FParameters.SSHPort) + ':localhost:' + IntToStr(FParameters.Port);
|
PlinkCmd := PlinkCmd + FParameters.SSHUser + '@';
|
||||||
|
if FParameters.SSHHost <> '' then
|
||||||
|
PlinkCmd := PlinkCmd + FParameters.SSHHost
|
||||||
|
else
|
||||||
|
PlinkCmd := PlinkCmd + FParameters.Hostname;
|
||||||
|
if FParameters.SSHPassword <> '' then
|
||||||
|
PlinkCmd := PlinkCmd + ' -pw ' + FParameters.SSHPassword;
|
||||||
|
PlinkCmd := PlinkCmd + ' -P ' + IntToStr(FParameters.SSHPort);
|
||||||
|
if FParameters.SSHPrivateKey <> '' then
|
||||||
|
PlinkCmd := PlinkCmd + ' -i "' + FParameters.SSHPrivateKey + '"';
|
||||||
|
PlinkCmd := PlinkCmd + ' -L ' + IntToStr(FParameters.SSHLocalPort) + ':' + FParameters.Hostname + ':' + IntToStr(FParameters.Port);
|
||||||
|
log(lcInfo, PlinkCmd);
|
||||||
|
// Create plink.exe process
|
||||||
FillChar(FPlinkProcInfo, SizeOf(TProcessInformation), 0);
|
FillChar(FPlinkProcInfo, SizeOf(TProcessInformation), 0);
|
||||||
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
|
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
|
||||||
StartupInfo.cb := SizeOf(TStartupInfo);
|
StartupInfo.cb := SizeOf(TStartupInfo);
|
||||||
@ -354,7 +371,7 @@ begin
|
|||||||
raise Exception.Create('Couldn''t execute PLink: '+CRLF+PlinkCmd);
|
raise Exception.Create('Couldn''t execute PLink: '+CRLF+PlinkCmd);
|
||||||
end;
|
end;
|
||||||
FinalHost := 'localhost';
|
FinalHost := 'localhost';
|
||||||
FinalPort := FParameters.SSHPort;
|
FinalPort := FParameters.SSHLocalPort;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user