Skip to content

Commit b2d0971

Browse files
authored
Merge pull request #66 from rundeck-plugins/RUN-2634-pty
RPL-40: add pty option
2 parents 7655934 + df4199e commit b2d0971

5 files changed

Lines changed: 30 additions & 2 deletions

File tree

src/main/java/com/plugin/sshjplugin/SSHJBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ static SSHJExec build(final INodeEntry nodeentry,
2222
SSHJExec sshbase = new SSHJExec();
2323
final String commandString = StringUtils.join(args, " ");
2424
sshbase.setCommand(commandString);
25-
25+
sshbase.setAllowPTY(sshjConnectionParameters.isAllocatePTY());
2626
configureSSHBase(nodeentry, sshjConnectionParameters, sshbase, logger);
2727
addEnvVars(sshbase, dataContext);
2828

src/main/java/com/plugin/sshjplugin/SSHJNodeExecutorPlugin.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public class SSHJNodeExecutorPlugin implements NodeExecutor, ProxySecretBundleCr
7878
public static final String NODE_ATTR_USE_SFTP = "use-sftp";
7979

8080
public static final String PROJECT_SSH_USER = PROJ_PROP_PREFIX + "ssh.user";
81+
public static final String CONFIG_SET_PTY = "always-set-pty";
8182

8283
public static final String FWK_PROP_SSH_AUTHENTICATION = FWK_PROP_PREFIX + NODE_ATTR_SSH_AUTHENTICATION;
8384
public static final String PROJ_PROP_SSH_AUTHENTICATION = PROJ_PROP_PREFIX + NODE_ATTR_SSH_AUTHENTICATION;
@@ -105,6 +106,10 @@ public class SSHJNodeExecutorPlugin implements NodeExecutor, ProxySecretBundleCr
105106
public static final String FWK_PROP_USE_SFTP = FWK_PROP_PREFIX + NODE_ATTR_USE_SFTP;
106107
public static final String PROJ_PROP_USE_SFTP = PROJ_PROP_PREFIX + NODE_ATTR_USE_SFTP;
107108

109+
public static final String NODE_ATTR_ALWAYS_SET_PTY = "always-set-pty";
110+
public static final String FWK_PROP_SET_PTY = FWK_PROP_PREFIX + NODE_ATTR_ALWAYS_SET_PTY;
111+
public static final String PROJ_PROP_SET_PTY = PROJ_PROP_PREFIX + NODE_ATTR_ALWAYS_SET_PTY;
112+
108113
public static final String SUDO_OPT_PREFIX = "sudo-";
109114

110115
public static final String DEFAULT_SUDO_PROMPT_PATTERN = "[sudo] password for";
@@ -182,6 +187,10 @@ public class SSHJNodeExecutorPlugin implements NodeExecutor, ProxySecretBundleCr
182187
"Use SFTP for file transfer",
183188
false, "false");
184189

190+
public static final Property ALWAYS_SET_PTY = PropertyUtil.bool(CONFIG_SET_PTY, "Force PTY",
191+
"Always force use of new pty",
192+
false, "false");
193+
185194
private SSHClient sshClient;
186195

187196
public void setSshClient(SSHClient sshClient) {
@@ -210,6 +219,7 @@ public Description getDescription() {
210219
builder.property(SSH_KEEP_ALIVE_MAX_ALIVE_COUNT);
211220
builder.property(SSH_RETRY_ENABLE);
212221
builder.property(SSH_RETRY_COUNTER);
222+
builder.property(ALWAYS_SET_PTY);
213223

214224
//mapping config input on project and framework level
215225
builder.mapping(CONFIG_KEYPATH, PROJ_PROP_SSH_KEYPATH);
@@ -233,6 +243,9 @@ public Description getDescription() {
233243
builder.mapping(CONFIG_RETRY_ENABLE, PROJ_PROP_RETRY_ENABLE);
234244
builder.frameworkMapping(CONFIG_RETRY_ENABLE, FWK_PROP_RETRY_ENABLE);
235245

246+
builder.mapping(CONFIG_SET_PTY, PROJ_PROP_SET_PTY);
247+
builder.frameworkMapping(CONFIG_SET_PTY, FWK_PROP_SET_PTY);
248+
236249
return builder.build();
237250
}
238251

@@ -246,6 +259,7 @@ public NodeExecutorResult executeCommand(ExecutionContext context, String[] comm
246259
node
247260
);
248261
}
262+
249263
boolean success = false;
250264

251265
final ExecutionListener listener = context.getExecutionListener();

src/main/java/com/plugin/sshjplugin/model/SSHJConnection.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,7 @@ static enum AuthenticationType {
6666
Map<String, String> getSshConfig();
6767

6868
String getBindAddress();
69+
70+
boolean isAllocatePTY();
71+
6972
}

src/main/java/com/plugin/sshjplugin/model/SSHJConnectionParameters.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,10 @@ public Map<String, String> getSshConfig() {
297297
public String getBindAddress() {
298298
return null;
299299
}
300-
300+
@Override
301+
public boolean isAllocatePTY() {
302+
return propertyResolver.resolveBoolean(SSHJNodeExecutorPlugin.CONFIG_SET_PTY);
303+
}
301304

302305

303306

src/main/java/com/plugin/sshjplugin/model/SSHJExec.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,16 @@ public class SSHJExec extends SSHJBase implements SSHJEnvironments {
2424
private String command = null;
2525
private int exitStatus = -1;
2626
private Map<String, String> envVars = null;
27+
private boolean allowPTY = false;
2728

2829
public void setCommand(String command) {
2930
this.command = command;
3031
}
3132

33+
public void setAllowPTY(boolean allowPTY){
34+
this.allowPTY = allowPTY;
35+
}
36+
3237
public void setPluginLogger(PluginLogger pluginLogger) {
3338
this.pluginLogger = pluginLogger;
3439
}
@@ -53,6 +58,9 @@ public void execute(SSHClient ssh) {
5358
pluginLogger.log(3, "["+getPluginName()+"] starting session" );
5459

5560
session = ssh.startSession();
61+
if(this.allowPTY){
62+
session.allocateDefaultPTY();
63+
}
5664

5765
pluginLogger.log(3, "["+getPluginName()+"] setting environments" );
5866

0 commit comments

Comments
 (0)