sshexec command - ftp get as parametes - ant

In my code am using something like
<sshexec host="somehost"
username="dude"
password="yo"
command="ftp_download"/>
<ftp action="get" server="server_todownload" userid="user" password="aaa" remotedir="dowload/dir">
<fileset dir="${installerdirectory}"><include name="${file_name}"/></fileset>
</ftp>
In "command" of sshexec how i can pass the ftp action as parameters??
is there any example or document is there to get more knowledge??
Thanks in advance

I guess you want to:
ssh to another machine, and
download something on that machine using ftp.
I think you misunderstood something. <sshexec> is a task that sshes to a machine and executes a command on that machine. The command it executes must exist on that machine. For example, your code:
<sshexec host="somehost" username="dude" password="yo" command="ftp_download"/>
There must be a command named ftp_download existing on somehost or your <sshexec> will fail. You can't use an ant task in your local build file as a parameter because <sshexec> doesn't work in this way at all.
Suggestion:
You can put the ftp task in an ant build file, and deploy it to the remote machine (you can use scp task) before sshexec. In sshexec's command, you write ant -f path_to_build_file ftp_target. You need to ensure that there is ant on that machine.

Related

Unable to transfer file with <scp> Ant task and username containing spaces

I am using the following Ant script with username and IP address. I want to transfer a file. If username has a space in it, the file is not transferring.
<project name="Hello World Project" default="info">
<property file="build.properties"/>
<target name="info">
<scp file="/home/smith/Gjs/ws2/abc.txt"
todir="Srupanan k:rakesh#19.1.21.6:~/" trust="true"/>
</target>
</project>
Is there any way to use <scp> with a username containing a space?
I checked the source code and from what I saw, the ant task does not mind spaces at all, it only checks for the : and # in the toDir.
There might be a problem in the Jsch library it uses to handle the ssh connection, although I doubt it would be easy to debug and fix. You should however make sure you're using an up-to-date installation of ant.
You could also try to use the sftp flag of the ant task in hope that the sftp implementation will handle spaces better.
If all fails you should still be able use an exec task to upload via a native scp call.
Good luck !

BUILD FAILED: C:\Users\USER\.ssh\known_hosts (The system cannot find the file specified)

I am trying to automate the deployment process through Ant build XML file. My Ant is of version 1.9.4. As part of that I am trying to send the built war file on to the remote Tomcat server. So, I am using the below code of SCP task.
<target name="scp_task">
<scp file="antproject1.war" todir="${username}#${ipaddress}:${tomcat.webapps.dir}" password="${password}"/>
</target>
Along with that I have ant-jsch-1.9.4.jar in my ANT_HOME/lib directory. And when I am trying to run the Ant command in Windows DOS command prompt. When run the command ant scp_task, I am getting the message as
BUILD FAILED: C:\Users\USER.ssh\known_hosts (The system cannot find the file specified)
Please help what else should I have to add for the code so that I could deploy my war file perfectly.
You have to create the known_hosts file in the given path with a public host key of the remote server.
The file uses a common OpenSSH format like:
example.com,93.184.216.34 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
You can also skip the host key validation, but only if you do not care about security (like if you are connecting within a private network).
<scp trust="true" .../>
See SCP Task documentation.

about ant sshexec

how to specify command in sshexec task of ant to execute an ant task on a remote server machine. like for example:
<sshexec host="somehost"
username="dude"
keyfile="${user.home}/.ssh/id_dsa"
commandResource="to_run"/>
in above code what would be in the command attribute while trying to perform an ant task on a remote server machine, and also if the ant task is to deploy an application
please help me out on this one as the appache site is not of much help.

Ant exec task as another user

I would like to execute a shell script from an ant build (I saw the exec task seems to do it), but this script has to be executed from a user different thant the one launching ant. Is there a way to do this?
You could use the sshsexec task. Connect locally or to a remote machine:
<sshexec host="localhost"
username="dude"
password="yo"
command="touch somefile"/>
This task will require the optional jsch.jar to be installed in your ANT lib.
Specifying a pirvate key would enable a password-less login.
Couldn't you execute, from ant, a script that executes the actual script using sudo? See How to pass the password to su/sudo/ssh without overriding the TTY? for how to pass the password from the command line.

Ant FTP and Multiple File get (mget)

Is there any way to use mget within Ant, without using the exec task?
Here is the rundown. I have to connect to a third party server that does not support globbing with FTP get, the server requires the client use mget to do a glob.
Here is my task:
<ftp server="host" userid="user" password="pass" action="get">
<fileset dir="mydir">
<include name="pdf/*_PDF.ZIP.pgp"/>
</fileset>
</ftp>
It does not return any files. When I log in directly (Linux FTP command line client) I can see files. "get *" fails but "mget *" works.
Any ideas how to get Ant to use mget instead of get?
Ant uses commons-net.jar for the FTPTask.
If you don't care about platform independence the easiest way would be to use a specific executable and the exec task. You could check in the mget.exe along with the project so the user does not need to install it.
If you need platform independence you will probably need to write you own FTP task. You could copy the one in the Ant source code and make the necessary modifications. You could also choose another FTP library if you want but I think that commons net should have the necessary features.

Resources