- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们正在尝试使用与我们在标准 FTP 客户端中相同的凭据来访问我们的一个 FTPS 服务器。但是,当使用 Java 类 FTPSClient
时,我们收到错误消息:
530 User cannot log in.
除此之外别无其他。到目前为止,我们有以下代码(针对示例进行了简化):
public final class FTPSExample {
public static final void main(String[] args) {
boolean error = false;
String server, username, password;
String protocol = "TLS"; // SSL/TLS
FTPSClient ftps;
server = "A_SERVER";
username = /*server + "|" + */"A_USER";
password = "A_PASS";
ftps = new FTPSClient(protocol);
ftps.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
ftps.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
try {
int reply;
ftps.connect(server, 21);
System.out.println("Connected to " + server + ".");
reply = ftps.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftps.disconnect();
System.err.println("FTP server refused connection.");
} else {
ftps.sendCommand("HOST", server);
if (!ftps.login(username, password)) {
String[] welcomeMessage = ftps.getReplyStrings();
for(String s : welcomeMessage) {
System.out.println(s);
}
ftps.logout();
error = true;
}
}
}
catch (IOException e) {
if (ftps.isConnected()) {
try {
ftps.disconnect();
}
catch (IOException f) {
// do nothing
}
}
System.err.println("Could not connect to server.");
e.printStackTrace();
System.exit(1);
}
System.exit(error ? 1 : 0);
}
}
上面的代码为我们提供了以下日志消息:
220 Microsoft FTP Service
AUTH TLS
234 AUTH command ok. Expecting TLS Negotiation.
Connected to A_SERVER.
HOST A_SERVER
220 Host accepted.
USER A_USER
331 Password required for A_USER.
PASS A_PASS
530 User cannot log in.
530 User cannot log in.
QUIT
221 Goodbye.
同时,如果我们在 FTP 客户端(例如 FTP Voyager)中执行相同的操作,我们会得到:
STATUS:> Connecting to "A_SERVER" on port 21.
220 Microsoft FTP Service
COMMAND:> AUTH TLS
234 AUTH command ok. Expecting TLS Negotiation.
STATUS:> Negotiating SSL connection with server.
STATUS:> SSL connection established. All transactions are now secure.
STATUS:> Connected. Logging into the server
COMMAND:> HOST A_SERVER
220 Host accepted.
COMMAND:> USER A_USER
331 Password required for A_USER.
COMMAND:> PASS *********************
230 User logged in.
STATUS:> Login successful
我们尝试过的一些故障排除:
protocol
从 TLS 更改为 SSL,两者都会遇到同样的问题ftps.sendCommand("HOST", server);
。我们看到 FTP 客户端在登录之前正在运行此命令,如果没有该行,我们会收到错误:530 Valid hostname is expected.
FTPClient
,这会导致预期的 534 Policy requires SSL。
ftps.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
username = "A_SERVER|A_USER";
。同样的错误信息服务器确实带有证书,出于调试目的我们很乐意忽略它。这就是为什么我们将 TrustManager
设置为接受所有。还有其他我们应该注意的设置吗?
我们没有设置代理,也没有收到有用的错误消息。谷歌搜索 530 User cannot log in.
到目前为止没有提供任何有用的信息。有人有什么建议吗?
我设法使用名为 FTP4J
的不同包让它工作,但是,如果有人能阐明为什么 FTPSClient
不工作,那就太好了。这是工作代码:
public final class FTPSExample {
public static final void main(String[] args) {
boolean error = false;
String server, username, password;
FTPClient ftps;
server = "A_SERVER";
username = server + "|" + "A_USER";
password = "A_PASS";
ftps = new FTPClient();
ftps.setSecurity(FTPClient.SECURITY_FTPES);
ftps.addCommunicationListener(new FTPCommunicationListener() {
@Override
public void sent(String s) {
System.out.println(s);
}
@Override
public void received(String s) {
System.out.println(s);
}
});
try {
ftps.connect(server);
System.out.println("Connected to " + server + ".");
if (!ftps.isConnected()) {
ftps.disconnect(false);
System.err.println("FTP server refused connection.");
} else {
//ftps.sendSiteCommand("HOST " + server);
ftps.login(username, password);
if (!ftps.isAuthenticated()) {
error = true;
} else {
System.out.println("Connected!");
}
ftps.logout();
}
}
catch (Exception e) {
if (ftps.isConnected()) {
try {
ftps.disconnect(false);
}
catch (Exception f) {
// do nothing
}
}
System.err.println("Could not connect to server.");
e.printStackTrace();
System.exit(1);
}
System.exit(error ? 1 : 0);
}
}
结果数据:
220 Microsoft FTP Service
Connected to A_SERVER.
AUTH TLS
234 AUTH command ok. Expecting TLS Negotiation.
USER A_SERVER|A_USER
331 Password required for A_SERVER|A_USER.
PASS A_PASS
230 User logged in.
最佳答案
我记得当我尝试将我的代码从 FTP 更改为 FTPS 时,我遇到了同样的错误,我已经使用以下代码解决了它:
public void FTPSUploader(String host, String user, String pwd,int numPort) throws Exception {
FTPSClient ftp = new FTPSClient();
ftps.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
int reply;
ftps.connect(host, numPort);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftps.disconnect();
throw new Exception("Exception in connecting to FTPs Server");
}
ftps.login(user, pwd);
ftps.setFileType(FTP.BINARY_FILE_TYPE);
ftps.enterLocalPassiveMode();
ftps.execPBSZ(0);// Set protection buffer size
ftps.execPROT("P");// Set data channel protection to private--
}
关于java - 530 用户无法使用 FTPSClient 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975257/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!