我有一个Powershell脚本,它将通过针对多个服务器的自动化工具运行.它工作正常的Windows机器,远程调用使用该工具的服务帐户,而无需任何提示或代码暴露任何凭据.该脚本还使用SharpSSH软件包通过SSH对Linux机器运行.SharpSSH不会自动使用Powershell用户的凭据,但需要用户名和密码,RSA密钥文件或PSCredential对象.我无法使用Get-Credential提示凭据,因为它是通过自动化工具运行的.我不想在代码中公开用户名和密码,或者在那里放置一个RSA密钥.我想从当前Powershell的用户(服务帐户)构造一个PSCredential对象.试试[System.Net.CredentialCache] ::
有没有人有从当前用户创建PSCredential对象的方法?或者也许是这个问题完全不同的替代方案?
非常感谢!
我使用SharpSSH连接到stfp服务器.
这对于我需要添加如下的privatekey文件:
sftp.AddIdentityFile(KeyFilePath);
Run Code Online (Sandbox Code Playgroud)
但这引发了一个例外:
invaid privatekey: C:\KeyFile\privatekey_2.ppk
Run Code Online (Sandbox Code Playgroud)
该文件是使用puttygen创建的,并与filezilla一起使用.privatekey-type无关紧要(SSH-1 RSA,SSH-2 RSA,SSH-2 DSA).每次都有相同的结果.
你知道如何处理这个问题吗?
如何使用Tamir Gal的SharpSSH从SFTP服务器删除文件?我已经能够完成其他功能但删除.
我必须从SFTP位置下载一些文件.
我正在使用这些SharpSsh
库,但我无法连接.
以下是我的SFTP详细信息:
<add key="FTPHost" value="xyz.csod.com" />
<add key="FTPDirectory" value="/Test" />
<add key="FTPUserName" value="abc" />
<add key="FTPPassword" value="pass" />
<add key="FTPPort" value="22" />
Run Code Online (Sandbox Code Playgroud)
下面是与SFTP连接的c#代码:
using Tamir.SharpSsh;
using Tamir.SharpSsh.jsch;
using Tamir.Streams;
public string DownloadFile()
{
Sftp oSftp = new Sftp(host, userName, password);//
oSftp.Connect(port);
}
Run Code Online (Sandbox Code Playgroud)
但我在Connect()时遇到异常.是 -
附加信息:
System.Net.Sockets.SocketException(0x80004005):请求的名称有效,但未找到所请求类型的数据
位于Tamir.SharpSsh的Tamir.SharpSsh.java.net.Socket..ctor(String host,Int32 port)的System.Net.Dns.GetHostByName(String hostName)的System.Net.Dns.InternalGetHostByName(String hostName,Boolean includeIPv6) .jsch.Util.createSocket(String host,Int32 port,Int32 timeout)"
我正在使用C#控制台应用程序.
我正在尝试使用SharpSSH从远程SFTP服务器获取文件,我想将其作为流读出.
我发现:
class Sftp
,有一个Get
方法将它保存到本地文件 - 关闭
class SshStream
,可能会做我想要的,但似乎脱节,Sftp
所以我可能必须自己实现SFTP部分(??)
class ChannelSftp
,它实现了SFTP方法get(String, OutputStream)
,这看起来很完美,除了它是一个低级类,对我来说如何甚至实例化它都不是很明显
看起来如果Sftp
的ChannelSftp SftpChannel
财产是不是私人的,我可以使用,一切都将是完美的.不过,如果可能的话,我想避免攻击SharpSSH.
我错过了什么吗?
我试图通过SharpSSH连接到ftp,如下所示:
Sftp Connection = new Sftp(ftpAddress, FTPLogin, FTPPasword);
Connection.Connect();
Run Code Online (Sandbox Code Playgroud)
这导致了JSchException:
System.Net.Sockets.SocketException: The requested name is valid, but no data of the requested type was found
at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
at System.Net.Dns.GetHostByName(String hostName)
at Tamir.SharpSsh.java.net.Socket..ctor(String host, Int32 port)
at Tamir.SharpSsh.jsch.Util.createSocket(String host, Int32 port, Int32 timeout)
Run Code Online (Sandbox Code Playgroud)
经过一番搜索,我尝试了这段代码:
IPHostEntry ip = Dns.GetHostEntry(ftpAddress);
Run Code Online (Sandbox Code Playgroud)
我得到了SocketException:{没有这样的主机是已知的}
现在一些背景 - 我能够通过主机名和IP地址(外部和内部)与Filezilla连接到ftpAdress.当我> ping ftp.mydomain.com时,
我得到> 10.5.165.15
但是在> ping -a 10.5.165.15
我得到> ftpnew.mydomain.com
如果我是对的,我会因DNS <> revDNS问题而被拒绝.
我的问题是 - 我能做些什么让我的sftp连接正常工作.
这是我连接并发送文件到远程SFTP服务器的代码.
public static void SendDocument(string fileName, string host, string remoteFile, string user, string password)
{
Scp scp = new Scp();
scp.OnConnecting += new FileTansferEvent(scp_OnConnecting);
scp.OnStart += new FileTansferEvent(scp_OnProgress);
scp.OnEnd += new FileTansferEvent(scp_OnEnd);
scp.OnProgress += new FileTansferEvent(scp_OnProgress);
try
{
scp.To(fileName, host, remoteFile, user, password);
}
catch (Exception e)
{
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用CoreFTP成功连接,发送和接收文件.因此,问题不在于服务器.当我运行上面的代码时,进程似乎停在scp.To方法.它只是无限期地挂起.
任何人都知道我的问题可能是什么?也许它与将密钥添加到SSH缓存有关?如果是这样,我该怎么做呢?
编辑:我使用wireshark检查了数据包,发现我的计算机没有执行Diffie-Hellman密钥交换初始化.这一定是问题所在.
编辑:我最终使用以下代码.请注意,StrictHostKeyChecking已关闭以简化操作.
JSch jsch = new JSch();
jsch.setKnownHosts(host);
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
System.Collections.Hashtable hashConfig = new System.Collections.Hashtable();
hashConfig.Add("StrictHostKeyChecking", "no");
session.setConfig(hashConfig);
try …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个允许我从远程服务器上传和下载文件的应用程序.我使用sftp作为我的传输协议,我需要将所有文件和目录列入listview.我正在使用sharpssh进行sftp.有人能指出我正确的方向吗?
谢谢你,
Bas van Ooyen
我正在考虑使用JSch库(或实际上是它的sharpSSH C#端口)为SFTP设置公钥客户端和服务器身份验证.不幸的是,我找不到关键加载函数使用的文件格式的任何文档:
jsch.addIdentity(filename, passphrase);
jsch.setKnownHosts(filename);
Run Code Online (Sandbox Code Playgroud)
私钥和已知主机文件使用什么文件格式?
private void OVConnection()
{
try {
//Create a new JSch instance
JSch jsch = new JSch();
this.Dispatcher.BeginInvoke(new Action<Status>(DisplayStatus), Status.Connecting);
//Create a new SSH session
string host = "url"; //url
string user = "***"; //ssh username
string pass = "*******"; //ssh password
int sshPort = 22; //ssh port
int rPort = 3306;
int lPort = 3306;
int port = Convert.ToInt32(sshPort);
session = jsch.getSession(user, host, port);
session.setHost(host);
session.setPassword(pass);
UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);
session.connect();
//Set port forwarding on the opened session …
Run Code Online (Sandbox Code Playgroud) sharpssh ×10
c# ×8
sftp ×8
.net ×2
ssh ×2
credentials ×1
dns ×1
java ×1
jsch ×1
powershell ×1
private-key ×1
reverse-dns ×1
streaming ×1