Visual FoxPro
Visual FoxPro
Set an Environment Variable on an SSH Channel
See more SSH Examples
Demonstrates the Chilkat Ssh.SendReqSetEnv method, which asks the server to set an environment variable for a session channel. The arguments are the channel number, the variable name, and its value. Send these requests before the exec, shell, or subsystem request.
Background: This is the clean way to pass configuration to a remote command without embedding it in the command line. Be aware that many SSH servers restrict which variables clients may set (OpenSSH's
AcceptEnv), so a request can be silently ignored or rejected — do not rely on it without verifying the server's policy.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loSsh
LOCAL lnSshPort
LOCAL lcPassword
LOCAL lnChannelNum
LOCAL lcOutput
lnSuccess = 0
* Demonstrates the Ssh.SendReqSetEnv method, which asks the server to set an environment
* variable for a session channel. The 1st argument is the channel number, the 2nd is the
* variable name, and the 3rd is its value. Send it before the exec, shell, or subsystem
* request.
loSsh = CreateObject('Chilkat.Ssh')
lnSshPort = 22
lnSuccess = loSsh.Connect("ssh.example.com",lnSshPort)
IF (lnSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
* Normally you would not hard-code the password in source. You should instead obtain it
* from an interactive prompt, environment variable, or a secrets vault.
lcPassword = "mySshPassword"
lnSuccess = loSsh.AuthenticatePw("mySshLogin",lcPassword)
IF (lnSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
* Open a session channel. A negative return value indicates failure.
lnChannelNum = loSsh.OpenSessionChannel()
IF (lnChannelNum < 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
* Set environment variables for the channel. Multiple variables may be requested.
lnSuccess = loSsh.SendReqSetEnv(lnChannelNum,"LANG","en_US.UTF-8")
IF (lnSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
lnSuccess = loSsh.SendReqSetEnv(lnChannelNum,"MY_APP_MODE","production")
IF (lnSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
* Now run the command, which sees the requested environment.
lnSuccess = loSsh.SendReqExec(lnChannelNum,"echo $MY_APP_MODE")
IF (lnSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
* IMPORTANT: Set a read timeout. ReadTimeoutMs defaults to 0, which means no limit -- without
* it, this call waits forever if the server never sends channel close.
loSsh.ReadTimeoutMs = 15000
lnSuccess = loSsh.ChannelReceiveToClose(lnChannelNum)
IF (lnSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
lcOutput = loSsh.GetReceivedText(lnChannelNum,"utf-8")
IF (loSsh.LastMethodSuccess = 0) THEN
? loSsh.LastErrorText
RELEASE loSsh
CANCEL
ENDIF
? lcOutput
loSsh.Disconnect()
RELEASE loSsh